繁体   English   中英

在多索引熊猫数据框中汇总重复的行

[英]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

sumunstackstack

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.

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