如何连接两个数据帧中的列和求和值?

时间:2018-12-01 16:04:09

标签: python python-3.x dataframe

我有两个数据帧(左边的数据帧是1,另一个是2),我想根据以下条件获得最终的数据帧:

  1. Col2分组Col1,例如A 566,788,888,999,1212

  2. 在数据帧2中,我可以找到(Group A) 788,888,999,1212,因此我想保留它,而566不在数据帧2中,请忽略它。

    < / li>
  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 :(得分:0)

假设df1df2是您的初始数据帧:

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