我试图在DataframeA.IDCol2中搜索DataframeB.ColA的值,然后使用DataframeA.IDCol1和DataframeA.IDCol3的总和来创建一个匹配的值。
DataframeA
IDCol1 IDCol2 IDCol3
0 ABC 123 2
1 ABC 456 5
2 ABC 789 2
3 ABC 1011 1
4 CDE 123 3
5 CDE 456 2
6 CDE CCC 4
7 CDE AAA 1
DataframeB
ColA
0 123
1 456
2 CCC
3 1011
输出
Col Sum
0 ABC 8
1 CDE 9
答案 0 :(得分:3)
先使用DataFrame.merge
,然后再聚合sum
:
df = (DataframeA.merge(DataframeB, left_on='IDCol2', right_on='ColA')
.groupby('IDCol1', as_index=False)['IDCol3']
.sum())
print (df)
IDCol1 IDCol3
0 ABC 8
1 CDE 9
另一种解决方案:
s = DataframeB['ColA']
df = DataframeA.set_index('IDCol1').query('IDCol2 in @s')['IDCol3'].sum(level=0).reset_index()
print (df)
IDCol1 IDCol3
0 ABC 8
1 CDE 9
答案 1 :(得分:2)
您可以merge
,groupby
IDCol1
并与sum
聚合:
(DataframeA.merge(DataframeB, left_on='IDCol2', right_on='ColA')
.groupby('IDCol1')
.IDCol3.sum()
.reset_index())
IDCol1 IDCol3
0 ABC 8
1 CDE 9
答案 2 :(得分:2)
将series.isin()
和groupby()
与sum
一起使用:
dfA[dfA.IDCol2.isin(dfB.ColA)].groupby('IDCol1')['IDCol3'].sum().reset_index(name='Sum')
IDCol1 Sum
0 ABC 8
1 CDE 9