为了账号安全,请及时绑定邮箱和手机立即绑定

具有零值的 Pandas 汇总表

具有零值的 Pandas 汇总表

繁华开满天机 2023-07-18 16:58:38
我正在尝试使用 python 的 pandas 中的 .describe() 创建一个汇总表。我有以下数据框:df = pd.DataFrame({'Group':['Group1', 'Group1', 'Group1', 'Group2', 'Group2', 'Group2', 'Group3', 'Group3', 'Group4'],'Cat':['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5', 'Cat', 'Cat7', 'Cat8', 'Cat9'],'Value':[1230,4019,9491,9588,6402,1923,492,8589,8582]})df    Group   Cat Value0   Group1  Cat1    12301   Group1  Cat2    40192   Group1  Cat3    94913   Group2  Cat4    95884   Group2  Cat5    64025   Group2  Cat     19236   Group3  Cat7    4927   Group3  Cat8    85898   Group4  Cat9    8582我想生成一个按 Group 和 Cat 分组的汇总表,其中不在 Group 中的所有 Cats 以相同的方式显示,所有值 = 0。我正在尝试:        df.groupby(['Group', 'Cat']).describe()# That has the following output:            Value    count   mean    std min 25% 50% 75% max    Group   Cat                                 Group1  Cat1    1.0 1230.0  NaN 1230.0  1230.0  1230.0  1230.0  1230.0            Cat2    1.0 4019.0  NaN 4019.0  4019.0  4019.0  4019.0  4019.0            Cat3    1.0 9491.0  NaN 9491.0  9491.0  9491.0  9491.0  9491.0    Group2  Cat     1.0 1923.0  NaN 1923.0  1923.0  1923.0  1923.0  1923.0            Cat4    1.0 9588.0  NaN 9588.0  9588.0  9588.0  9588.0  9588.0            Cat5    1.0 6402.0  NaN 6402.0  6402.0  6402.0  6402.0  6402.0    Group3  Cat7    1.0 492.0   NaN 492.0   492.0   492.0   492.0   492.0            Cat8    1.0 8589.0  NaN 8589.0  8589.0  8589.0  8589.0  8589.0    Group4  Cat9    1.0 8582.0  NaN 8582.0  8582.0  8582.0  8582.0  8582.0我想知道如何获得这个输出。
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

您还可以根据获得的索引创建笛卡尔积索引列表reindex:


out = df.groupby(['Group', 'Cat']).describe()

idx = pd.MultiIndex.from_product((out.index.levels[0],out.index.levels[1]))

out = out.reindex(idx,fill_value=0)

            Value                                                     

            count    mean  std     min     25%     50%     75%     max

Group1 Cat    0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat1   1.0  1230.0  NaN  1230.0  1230.0  1230.0  1230.0  1230.0

       Cat2   1.0  4019.0  NaN  4019.0  4019.0  4019.0  4019.0  4019.0

       Cat3   1.0  9491.0  NaN  9491.0  9491.0  9491.0  9491.0  9491.0

       Cat4   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat5   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat7   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat8   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat9   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

Group2 Cat    1.0  1923.0  NaN  1923.0  1923.0  1923.0  1923.0  1923.0

       Cat1   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat2   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat3   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat4   1.0  9588.0  NaN  9588.0  9588.0  9588.0  9588.0  9588.0

       Cat5   1.0  6402.0  NaN  6402.0  6402.0  6402.0  6402.0  6402.0

       Cat7   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat8   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat9   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

Group3 Cat    0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       Cat1   0.0     0.0  0.0     0.0     0.0     0.0     0.0     0.0

       ....................................

       ...............................


查看完整回答
反对 回复 2023-07-18
?
慕斯709654

TA贡献1840条经验 获得超5个赞

检查unstack + stack,注意我还建议保留行值NaN不填充 0

out = df.groupby(['Group', 'Cat']).describe().unstack().stack(dropna=False)


查看完整回答
反对 回复 2023-07-18
  • 2 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信