[英]Python comparing columns of two dataframes and producing index of matching rows
[英]Dataframes in Python - matching multiple columns of rows between two data frames
我有两个数据框 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 行。
您可以尝试使用how="left"
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
列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.