使用匹配的ID将值从一个数据帧填充到另一个数据帧

时间:2017-01-30 17:11:43

标签: python pandas

我有两个pandas数据框,我想得到DF1中每个ID的items_bought总和。然后在DF2中添加一列,其中包含从DF1计算的items_bought的总和与匹配的ID,否则用0填充它。如何以优雅和有效的方式执行此操作?

DF1

ID | items_bought
1        5
3        8
2        2
3        5
4        6
2        2

DF2

ID
1
2
8
3
2

所需结果:DF2成为

ID | items_bought
1        5
2        4
8        0
3        13
2        4

2 个答案:

答案 0 :(得分:2)

df1.groupby('ID').sum().loc[df2.ID].fillna(0).astype(int)
Out[104]: 
    items_bought
ID              
1              5
2              4
8              0
3             13
2              4
  1. 使用df1计算每个ID的总和。
  2. 结果数据框现在由ID编制索引,因此您可以通过调用df2选择loc个ID。
  3. 使用fillna填补空白。
  4. NA由float类型处理。现在它们被删除了,将列转换回整数。

答案 1 :(得分:1)

使用groupbysum,然后reindexfill_value=0和最后reset_index的解决方案:

df2 = df1.groupby('ID').items_bought.sum().reindex(df2.ID, fill_value=0).reset_index()
print (df2)
   ID  items_bought
0   1             5
1   2             4
2   8             0
3   3            13
4   2             4