pandas - 对于下图,如何将 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
但是如何转换这个输出,如第二张图所示?如果有人能够帮助我,那将更有帮助。提前致谢。
解决方案
使用crosstab
withmargins=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
推荐阅读
- python - 如何在一个视图中拥有来自两个模型的两个对象
- c# - 在 Code First Entity Framework 的构造函数中将连接字符串作为参数传递
- python - 如何创建一个矩阵矩阵,其中包含所有可能场景的列表,其中 18 张牌可以平均分配给 6 名玩家
- javascript - 架构程序以便 Angular 不会在每次将更新推送到商店时重新渲染 MediaStream 组件?
- hyperledger-fabric - 无法连接到任何对等事件中心。需要至少连接 1 个事件中心才能接收提交事件
- python - Pytransitions 中的嵌套
- sqlite - 在 win IOT 上连接 sqlite 数据库
- java - 使用 Java 将数据写入 Excel 工作表的问题
- scala - 深不可测的 Spring 错误:未扫描服务类
- python - Rename object internal repr, name // tkinter 问题