繁体   English   中英

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

[英]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_sumdf1的子集,所以我们在这里选择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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM