首页 > 解决方案 > 对于下图,如何将 groupby 用于 pandas 中的多个列?

问题描述


这是熊猫中的输入表: 在此处输入图像描述

这是一个如下所示的输出表: 在此处输入图像描述 dtype: int64

亲爱的朋友们,
我是pandas 新手,使用pandas 的第二张图显示了如何获得结果。我使用这种方法得到如下所示的输出

"df.groupby(['Months', 'Status']).size()"


月份 状态
Apr-20 IW 2
OW 1
Jun-20 IW 4
OW 4
May-20 IW 3
OW 2

dtype: int64
但是如何转换这个输出,如第二张图所示?如果有人能够帮助我,那将更有帮助。提前致谢。

标签: pandas

解决方案


使用crosstabwithmargins=True参数,然后在必要时删除最后一Total列,使用原始列的顺序更改列的DataFrame.reindex顺序,最后将索引转换为列,DataFrame.reset_index并删除列名DataFrame.rename_axis

df = (pd.crosstab(df['Status'], df['Months'],  margins_name='Total', margins=True)
       .iloc[:, :-1]
       .reindex(df['Months'].unique(), axis=1)
       .reset_index()
       .rename_axis(None, axis=1))
print (df)
  Status  Apr_20  May_20  Jun_20
0     IW       4       2       4
1     OW       1       2       4
2  Total       5       4       8

推荐阅读