Как я могу объединить столбцы и суммировать значения из двух фреймов данных? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть два фрейма данных (левый фрейм данных равен 1, другой - 2), и я хочу получить окончательный фрейм данных на основе следующих условий:

  1. Группа Col2 на Col1, например, A 566,788,888,999,1212

  2. В кадре данных 2 я могу обнаружить, что (Group A) 788,888,999,1212, поэтому я хочу сохранить его, а 566 - нетв кадре данных 2, поэтому игнорируйте его.

  3. Сумма Итого для всех элементов в кадре данных 1 и 2, например, A-788(2), A-888(3), A-999(4), A-1212 (5), 788-888(12), 999-1212 (13), поэтому 2+3+4+5+12+13 = 39


Col1    Col2  Total        Col3   Col4   Total  
 A      566    1            788   888      12
 A      788    2            999   1212     13
 A      888    3            700   707      14
 A      999    4            701   702      15
 A      1212   5
 B      700    6
 B      701    7
 B      702    8
 B      703    9
 B      704    10
 B      705    11

Ожидаемый результат

ResultCol1    ResultCol2           ResultTotal
  A           788,888,999,1212        39
  B           700,701,702             50

1 Ответ

0 голосов
/ 01 декабря 2018

Предполагая, что df1 и df2 - ваши исходные кадры данных:

In [345]: common_values = pd.concat([df2.Col3, df2.Col4])

In [346]: def f(x):
     ...:     return pd.Series({'Col2': ','.join(map(str, x.Col2)),
     ...:                       'Total': x.Total.sum() 
     ...:                       + df2[(df2.Col3.isin(x.Col2) | df2.Col4.isin(x.Col2))]['Total'].sum()})
     ...:         

In [347]: df_totals = df1[df1.Col2.isin(common_values)].groupby('Col1').apply(f)

In [348]: df_totals
Out[348]: 
                  Col2  Total
Col1                         
A     788,888,999,1212     39
B          700,701,702     50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...