如何在多索引列上使用 pandas rename()?

Posted

技术标签:

【中文标题】如何在多索引列上使用 pandas rename()?【英文标题】:How to use pandas rename() on multi-index columns? 【发布时间】:2019-04-29 05:54:29 【问题描述】:

如何使用 rename() 函数从 pandas DataFrame 中简单地重命名 MultiIndex 列?

我们看一个例子,创建这样一个DataFrame:

import pandas
df = pandas.DataFrame('A': [1, 1, 1, 2, 2], 'B': range(5), 'C': range(5))
df = df.groupby("A").agg("B":["min","max"],"C":"mean")
print(df)

    B        C
  min max mean
A             
1   0   2  1.0
2   3   4  3.5

我可以通过使用元组作为名称来选择给定的 MultiIndex 列:

print(df[("B","min")])

A
1    0
2    3
Name: (B, min), dtype: int64

但是,当使用与 rename() 函数相同的元组命名时,它似乎不被接受:

df.rename(columns=("B","min"):"renamed",inplace=True)
print(df)
    B        C
  min max mean
A             
1   0   2  1.0
2   3   4  3.5

知道应该如何调用 rename() 来处理多索引列吗?

PS :我知道之前扁平化列名的其他选项,但这会阻止单行,因此我正在寻找更清洁的解决方案(请参阅my previous question)

【问题讨论】:

看来***.com/questions/41221079/… 回答了这个问题 【参考方案1】:

这并不能按措辞回答问题,但它适用于您给定的示例(假设您希望它们全部重命名而没有 MultiIndex):

import pandas as pd
df = pd.DataFrame('A': [1, 1, 1, 2, 2], 'B': range(5), 'C': range(5))
df = df.groupby("A").agg(
    renamed=('B', 'min'),
    B_max=('B', 'max'),
    C_mean=('C', 'mean'),
)
print(df)

   renamed  B_max  C_mean
A                        
1        0      2     1.0
2        3      4     3.5

更多信息,您可以查看pandas docs 和一些related other questions。

【讨论】:

以上是关于如何在多索引列上使用 pandas rename()?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 连接多索引列

如何重新排序 Pandas 中的多索引列?

具有多索引列的 Pandas groupby

使用多索引列连接两个 pandas 数据框

pandas 透视多索引列

Python/Pandas - 查询多索引列 [重复]