熊猫-在数据框之间查找值,并为匹配项添加一系列值

时间:2019-07-12 10:38:14

标签: python pandas

我试图在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    

3 个答案:

答案 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)

您可以mergegroupby 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