python - 将交叉表数据框转换为单个(堆叠)
问题描述
假设我制作了以下交叉表:
foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
pd.crosstab(foo, bar)
这给出了:
col_0 d e
row_0
a 1 0
b 0 1
我想将上面转换为单个堆叠表,这样我得到:
row_0 tot d tot e
0 a 1 0
1 b 0 1
即列的标题d
和e
更改为tot d
和tot e
现在row_0
是一列。到目前为止,我通过将交叉表版本保存到 excel 中并手动施加更改并将其导入来做到这一点。但我确信应该有更有效的方法来做到这一点?
解决方案
DataFrame.add_prefix
与DataFrame.reset_index
和最后一起使用DataFrame.rename_axis
:
df = pd.crosstab(foo, bar)
df = df.add_prefix('tot ').reset_index().rename_axis(None, axis=1)
print (df)
row_0 tot d tot e
0 a 1 0
1 b 0 1
推荐阅读
- applescript - 使用 Automator 通过 QuickTime 将 wav 转换为 m4a
- excel - 完全除数的“n”的最大幂
- c# - 在 .NetCore 的 EF 核心中禁用和启用表触发器
- python-3.x - 如何在我的文件夹中找到 ._6182142_V1.csv?
- php - 从查询中获取特定字段(不起作用)未定义变量:fetch_data
- spring - Liquibase 正在尝试执行已执行的脚本
- java - 尝试上传文件时 FTPClient 连接超时
- javascript - 如何使用 RxJS 发出多个 HTTP 请求并将响应合并到一个有效负载中并将其映射到另一个动作?
- android - 使recyclerview填满整个页面
- javascript - 如何修复 reactjs 中的“编译失败”?