根据字典条件在groupby之后求和行值?



我正试图找出如何添加数字列(供应,需求)的行条目。我完全不知所措。我最初的想法是用一个字典来实现这一点,我在字典中指定条件(或者可能有另一种更有效的方法来做到这一点)。我的第二个想法是分离数据集,这样每个部分都有自己的数据框架,然后我使用一堆条件,但这将是我的最后一个选择,因为我的数据集有大约10000个部分。在本例中,我只想将规划位置China和/或CH_China的行供应和需求与工厂US和/或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]})

我假设您想按零件号对美国/中国进行分组:

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())

打印:

最新更新