【问题标题】:How to use pandas rename() on multi-index columns?如何在多索引列上使用 pandas rename()?
【发布时间】: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

【问题讨论】:

标签: pandas rename multi-index


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2019-02-02
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2017-01-27
    • 2014-01-01
    相关资源
    最近更新 更多