如何重命名Pandas DataFrame中索引上方的非列非索引标识‘source’
解决DataFrame层级索引顶层名称重命名问题
问题背景
你遇到的这个source标识,其实是DataFrame列的层级索引(MultiIndex)的顶层名称——因为你的数据是通过groupby.sum()后转置得到的,转置后原来的分组键变成了列的顶层索引,它的名称就是source,但它不属于列名或行索引的一部分,所以直接用常规的列名/索引修改方法无效。
你的原始DataFrame结构大概是这样:
source A to B Diff B to C Diff risk_qty 4.909391e+07 0.0000 risk_delta 4.900294e+07 962.5669 risk_mtm 0.000000e+00 0.0000 risk_gamma 0.000000e+00 0.0000 risk_rho 8.322120e+01 0.0000
尝试Sayandip的方案后出现了额外层级的结构,不过我们可以直接针对顶层索引名称做精准修改。
解决方案
你可以通过修改列的层级索引名称来替换source,具体步骤如下:
- 先确认当前列的层级名称:
print(df.columns.names) # 输出大概率是 ['source'] 或者 ['source', None],取决于你的转置操作细节 - 根据层级数量修改顶层名称,比如改成
RiskType:- 如果是单层层级索引(转置后常见情况):
df.columns.names = ['RiskType'] - 如果是多层层级索引(比如尝试方案后出现了
foo那层):# 只修改第0层的名称,保留其他层级的原有名称 df.columns.names = ['RiskType', df.columns.names[1]]
- 如果是单层层级索引(转置后常见情况):
- 修改后再查看DataFrame结构,
source就会被替换成你指定的名称了。
验证效果
修改后你的DataFrame会变成类似这样:
RiskType A to B Diff B to C Diff risk_qty 4.909391e+07 0.0000 risk_delta 4.900294e+07 962.5669 risk_mtm 0.000000e+00 0.0000 risk_gamma 0.000000e+00 0.0000 risk_rho 8.322120e+01 0.0000
内容的提问来源于stack exchange,提问作者CuriosElixir
相关产品推荐
相关产品推荐

