我有两个数据框df1 - 它包含一个'分组库存'按数值A,B和C分组的项目。对于每个项目,有一个总和列,它应该反映我对该特定类型的所有项目的总价格。最初我将sum列设置为零。
df2是我有A,B,C的物品清单以及物品的价格。
df1(初始库存):
A B C SUM
1 1 1 0
1 1 2 0
1 2 2 0
2 2 2 0
df2(项目清单):
A B C PRICE
2 2 2 30
1 1 2 100
1 1 2 110
1 1 2 105
所以我的代码应该将df1转换为:
df1(预期输出):
A B C SUM
1 1 1 0
1 1 2 315
1 2 2 0
2 2 2 30
说明:我的项目清单(df2)包含一个编码为2,2,2的项目,其值为30,包含三个编码为1,1,2的项目,其值为100 + 110 + 105 = 315.所以我更新了库存表df1,以反映编码2,2,2的项目的总值为30,编码1,1,2的项目的总值为315。对于编码为1,1,1和1,2,2的项目,我的值为0,因为它们在我的项目列表中找不到。
最有效的方法是什么?
我宁愿不使用循环,因为df1是720行而df2是10,000行。
答案 0 :(得分:1)
您可以尝试使用merge
对“A”,“B”和“C”列how="left"
进行df2_sum
。 (df1
下面是left
的子集,因此我们在这里选择df2_sum = df2.groupby(["A", "B", "C"])["PRICE"].sum().reset_index()
df1.merge(df2_sum, on=["A","B","C"], how="left").fillna(0)
A B C SUM PRICE
0 1 1 1 0 0.0
1 1 1 2 0 315.0
2 1 2 2 0 0.0
3 2 2 2 0 30.0
。)
PRICE
然后,您可以将SUM
添加到{{1}}列。