[英]Sum duplicated rows on a multi-index pandas dataframe
您好,我在与熊猫打交道时遇到了麻烦。 我试图对多索引数据框上的重复行求和。 我df.groupby(level=[0,1]).sum()
,也df.stack().reset_index().groupby(['year', 'product']).sum()
和一些其他人,但我无法使其正常工作。 我还想为每个给定年份添加每种独特的产品,如果未列出它们,则将它们的值设为0。
示例:具有多索引和3种不同乘积(A,B,C)的数据框:
volume1 volume2
year product
2010 A 10 12
A 7 3
B 7 7
2011 A 10 10
B 7 6
C 5 5
预期产量:如果给定年份有重复的产品,我们将它们相加。 如果其中一种产品没有列出一年,我们将创建一个新的全为0的行。
volume1 volume2
year product
2010 A 17 15
B 7 7
C 0 0
2011 A 10 10
B 7 6
C 5 5
任何想法 ? 谢谢
您可以将索引的第二级设置为CategoricalIndex
,当您使用groupby
,它将包括所有类别。
df.index.set_levels(pd.CategoricalIndex(df.index.levels[1]), 1, inplace=True)
df.groupby(level=[0, 1]).sum().fillna(0, downcast='infer')
volume1 volume2
year product
2010 A 17 15
B 7 7
C 0 0
2011 A 10 10
B 7 6
C 5 5
df = df.sum(level=[0,1]).unstack(fill_value=0).stack()
#same as
#df = df.groupby(level=[0,1]).sum().unstack(fill_value=0).stack()
用reindex
替代:
df = df.sum(level=[0,1])
#same as
#df = df.groupby(level=[0,1]).sum()
mux = pd.MultiIndex.from_product(df.index.levels, names = df.index.names)
df = df.reindex(mux, fill_value=0)
Alternative1,谢谢@Wen:
df = df.sum(level=[0,1]).unstack().stack(dropna=False)
print (df)
volume1 volume2
year product
2010 A 17 15
B 7 7
C 0 0
2011 A 10 10
B 7 6
C 5 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.