在 groupby 之后但基于字典条件对行值求和?
Summing row values after a groupby but based on a dictionary condition?
我想知道如何添加数字列 (supply,demand) 的行条目。我完全不知所措。我最初的想法是用字典来做到这一点,我在字典中指定条件(或者可能有另一种更有效的方法来做到这一点)?。我的第二个想法是分离数据集,使每个部分都有自己的数据框,然后我使用一堆条件,但这是我最后的选择,因为我的数据集有大约 10000 个部分。在此示例中,我只想将行的供应和需求与 Planning location China and/or CH_China 与 plants US and/or China 结合起来。
数据集:
df = pd.DataFrame(data={'Plant': ['China','New Zealand','US','US','Mexico'], 'Planning location': ['China','New Zealand','CH_China','US','China' ],'Part':[1,1,1,1,1],'Demand':[-5,6,7,8,9],'Supply':[4,10,-2,5,6]})
预期结果:
df_result = pd.DataFrame(data={'Plant': ['New Zealand','China & US','US','Mexico'], 'Planning location': ['New Zealand','China & CH_China','US','China' ],'Part':[1,1,1,1],'Demand':[6,2,8,9],'Supply':[10,2,5,6]})
我假设您想 分组 US/China 按部件号:
plant_is_china_us = df["Plant"].isin(["China", "US"])
planning_is_china = df["Planning location"].isin(["China", "CH_China"])
df1 = (
df[plant_is_china_us & planning_is_china]
.groupby("Part", as_index=False)
.sum()
)
df1[["Plant", "Planning location"]] = ["China & US", "China & CH_China"]
df2 = df[~(plant_is_china_us & planning_is_china)]
print(pd.concat([df2, df1]).reset_index(drop=True).to_markdown())
打印:
Plant
Planning location
Part
Demand
Supply
0
New Zealand
New Zealand
1
6
10
1
US
US
1
8
5
2
Mexico
China
1
9
6
3
China & US
China & CH_China
1
2
2
我想知道如何添加数字列 (supply,demand) 的行条目。我完全不知所措。我最初的想法是用字典来做到这一点,我在字典中指定条件(或者可能有另一种更有效的方法来做到这一点)?。我的第二个想法是分离数据集,使每个部分都有自己的数据框,然后我使用一堆条件,但这是我最后的选择,因为我的数据集有大约 10000 个部分。在此示例中,我只想将行的供应和需求与 Planning location China and/or CH_China 与 plants US and/or China 结合起来。 数据集:
df = pd.DataFrame(data={'Plant': ['China','New Zealand','US','US','Mexico'], 'Planning location': ['China','New Zealand','CH_China','US','China' ],'Part':[1,1,1,1,1],'Demand':[-5,6,7,8,9],'Supply':[4,10,-2,5,6]})
预期结果:
df_result = pd.DataFrame(data={'Plant': ['New Zealand','China & US','US','Mexico'], 'Planning location': ['New Zealand','China & CH_China','US','China' ],'Part':[1,1,1,1],'Demand':[6,2,8,9],'Supply':[10,2,5,6]})
我假设您想 分组 US/China 按部件号:
plant_is_china_us = df["Plant"].isin(["China", "US"])
planning_is_china = df["Planning location"].isin(["China", "CH_China"])
df1 = (
df[plant_is_china_us & planning_is_china]
.groupby("Part", as_index=False)
.sum()
)
df1[["Plant", "Planning location"]] = ["China & US", "China & CH_China"]
df2 = df[~(plant_is_china_us & planning_is_china)]
print(pd.concat([df2, df1]).reset_index(drop=True).to_markdown())
打印:
Plant | Planning location | Part | Demand | Supply | |
---|---|---|---|---|---|
0 | New Zealand | New Zealand | 1 | 6 | 10 |
1 | US | US | 1 | 8 | 5 |
2 | Mexico | China | 1 | 9 | 6 |
3 | China & US | China & CH_China | 1 | 2 | 2 |