我有两个数据帧(左边的数据帧是1,另一个是2),我想根据以下条件获得最终的数据帧:
按Col2
分组Col1
,例如A 566,788,888,999,1212
在数据帧2中,我可以找到(Group A) 788,888,999,1212
,因此我想保留它,而566
不在数据帧2中,请忽略它。
数据框架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
答案 0 :(得分:0)
假设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