You need to enable JavaScript to run this app. Pandas如何为多层列索引新增子层存储原始值与rank结果
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何为多层列索引新增子层存储原始值与rank结果

实现代码

import pandas as pd

# 复现初始两层列索引DataFrame
df = pd.DataFrame(
    data=[[1, 3], [2, 4]],
    columns=pd.MultiIndex.from_arrays(
        [['var', 'var'], ['var1', 'var2']]
    )
)

# 1. 为原始数据列追加第三层索引标签'mean',自动适配列数量
mean_cols = pd.MultiIndex.from_arrays([
    df.columns.get_level_values(0),
    df.columns.get_level_values(1),
    ['mean'] * len(df.columns)
])
df_mean = df.copy()
df_mean.columns = mean_cols

# 2. 计算列内排名,为排名结果追加第三层索引标签'rank'
# pct=True 对应示例中给出的0.5、1的百分比排名值,如需默认整数排名可去掉该参数
df_rank = df.rank(pct=True)
rank_cols = pd.MultiIndex.from_arrays([
    df_rank.columns.get_level_values(0),
    df_rank.columns.get_level_values(1),
    ['rank'] * len(df_rank.columns)
])
df_rank.columns = rank_cols

# 3. 沿列方向拼接后按列索引排序,保证同一二级列下的mean、rank子列相邻
result = pd.concat([df_mean, df_rank], axis=1).sort_index(axis=1)

最终输出效果

运行代码后result的结构完全匹配预期:

var              
  var1        var2      
  mean rank mean rank
0    1  0.5    3  0.5
1    2  1.0    4  1.0

说明:如果不需要百分比排名,仅需将df.rank(pct=True)改为df.rank(),即可得到默认的从1开始的整数排名结果。

内容的提问来源于stack exchange,提问作者Mustard Tiger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 13:06:04