Python中的数据帧 - 匹配两个数据帧之间的多列行

时间:2018-02-11 14:44:31

标签: python dataframe

我有两个数据框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行。

1 个答案:

答案 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}}列。