如何去除Pandas中describe生成的DataFrame嵌套列索引?
处理Pandas多级列索引的两种方法
我创建了一个DataFrame,经melt转换后通过groupby('variable').describe()生成统计摘要,但结果存在嵌套列索引。需要将其处理为两种格式:一是移除上层索引,仅保留统计指标列名;二是将嵌套索引合并为如value/count的组合列名。
原始代码
import pandas as pd import numpy as np df_rand = pd.DataFrame(np.random.randint(0, 100, size=(100, 4)), columns=list('ABCD')) df_rand = pd.melt(df_rand, value_vars=list('ABCD')) df_rand_summary = df_rand.groupby('variable').describe().reset_index(drop=True)
当前输出(含嵌套列索引)
value count mean std min 25% 50% 75% max 0 100.0 50.01 27.402534 0.0 28.00 52.5 73.00 99.0 1 100.0 49.85 29.836042 0.0 22.75 54.0 79.25 99.0 2 100.0 46.57 30.491017 0.0 19.75 40.0 76.00 99.0 3 100.0 53.27 28.303855 0.0 28.75 55.5 77.25 99.0
方案1:移除上层索引,仅保留统计指标列名
直接通过droplevel(0)移除多级索引的上层,或者手动指定列名列表:
# 方法1:用droplevel快速移除上层索引 df_rand_summary.columns = df_rand_summary.columns.droplevel(0) # 方法2:手动指定列名(适用于明确知道列名的场景) # df_rand_summary.columns = ['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max']
执行后输出
count mean std min 25% 50% 75% max 0 100.0 50.01 27.402534 0.0 28.00 52.5 73.00 99.0 1 100.0 49.85 29.836042 0.0 22.75 54.0 79.25 99.0 2 100.0 46.57 30.491017 0.0 19.75 40.0 76.00 99.0 3 100.0 53.27 28.303855 0.0 28.75 55.5 77.25 99.0
方案2:合并嵌套索引为组合列名
遍历多级索引的列名,用/连接上下层索引字符串:
df_rand_summary.columns = ['/'.join(col) for col in df_rand_summary.columns.values]
执行后输出
value/count value/mean value/std value/min value/25% value/50% value/75% value/max 0 100.0 50.01 27.402534 0.0 28.00 52.5 73.00 99.0 1 100.0 49.85 29.836042 0.0 22.75 54.0 79.25 99.0 2 100.0 46.57 30.491017 0.0 19.75 40.0 76.00 99.0 3 100.0 53.27 28.303855 0.0 28.75 55.5 77.25 99.0
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

