在 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