Pandas找到数据帧之间的值,并为匹配的数据帧添加一系列的值

2024-10-04 03:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在努力寻找数据框架B.ColA在数据帧A.IDCol2然后用数据帧A.IDCol1以及DataframeA.IDCol3文件对于匹配的值。你知道吗

数据帧A

        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

数据框架B

        ColA        
0       123     
1       456     
2       CCC     
3       1011      

输出

        Col     Sum     
0       ABC     8       
1       CDE     9    

Tags: 文件数据框架colsumabccccaaa
3条回答

^{}groupby()sum一起使用:

dfA[dfA.IDCol2.isin(dfB.ColA)].groupby('IDCol1')['IDCol3'].sum().reset_index(name='Sum')

  IDCol1  Sum
0    ABC    8
1    CDE    9

您可以^{}^{}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

先使用^{},然后聚合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

相关问题 更多 >