我有两个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
答案 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
ID
的总和。ID
编制索引,因此您可以通过调用df2
选择loc
个ID。fillna
填补空白。NA
由float类型处理。现在它们被删除了,将列转换回整数。答案 1 :(得分:1)
使用groupby
和sum
,然后reindex
与fill_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