如何在Pandas crosstab中按行维度为每个类别值展示多指标?
Pandas交叉表结构调整方案
问题说明
当前用pd.crosstab生成的交叉表,会把聚合指标(len、mean)放在列方向重复交叉结构,希望改成按行维度的每个类别值,在行方向纵向展示多指标。
当前代码
pd.crosstab([df.var1, df.var2], [df.var3], values=df.values_var, aggfunc=[len, np.mean])
调整方法
通过调整交叉表的层级索引,把聚合指标从列维度转移到行维度,即可实现期望结构:
方法1:转为多层行索引结构(匹配图示的期望输出)
import pandas as pd import numpy as np # 生成原始交叉表 cross_tab = pd.crosstab([df.var1, df.var2], [df.var3], values=df.values_var, aggfunc=[len, np.mean]) # 交换列层级顺序,将var3移到列的第一层,聚合函数移到第二层 cross_tab = cross_tab.swaplevel(axis=1) # 对列排序,保证结构整齐 cross_tab = cross_tab.sort_index(axis=1) # 将列的聚合函数层级转为行索引,实现纵向展示 adjusted_tab = cross_tab.stack(level=0)
方法2:转为扁平化长表结构
如果需要更简洁的长格式输出,可进一步展开所有层级:
long_format_tab = cross_tab.stack().stack().reset_index(name='指标值')
内容的提问来源于stack exchange,提问作者user1844086
相关产品推荐
相关产品推荐

