我正在尝试动态重命名数据框的列。原因是我想做一些像
这样的事情df.rename(..).plot()
这就是我尝试这样做的方式:
import pandas as pd
import numpy as np
np.random.seed(42)
cols = [(100,i) for i in range(1, 6)]
cols_replace = ['Sensor ' + str(i) for i in range(1, len(cols)+1)]
rename_dict = dict(zip(df.columns, cols_replace))
df = pd.DataFrame(np.random.rand(5, len(cols)), columns=pd.MultiIndex.from_tuples(cols))
print(df.rename(columns=rename_dict))
但是,由于某种原因,这不起作用,因为结果数据框仍然没有显示我正在寻找的列名:
100
1 2 3 4 5
0 0.374540 0.950714 0.731994 0.598658 0.156019
1 0.155995 0.058084 0.866176 0.601115 0.708073
2 0.020584 0.969910 0.832443 0.212339 0.181825
3 0.183405 0.304242 0.524756 0.431945 0.291229
4 0.611853 0.139494 0.292145 0.366362 0.456070
为什么这不符合我的预期,是否有办法实现这一目标?
rename_dict
的内容是:
{(100, 1): 'Sensor 1',
(100, 2): 'Sensor 2',
(100, 3): 'Sensor 3',
(100, 4): 'Sensor 4',
(100, 5): 'Sensor 5'}
答案 0 :(得分:2)
尝试将rename
与level
参数一起使用 -
df = df.rename(columns='Sensor {}'.format , level=1)
感谢Zero提供的速记改进。可替代地,
i = df.columns.levels[1] # OP's suggestion, for more flexibility!
j = ['Sensor ' + str(x) for x in range(1, len(cols) + 1)]
rename_dict = dict(zip(i, j))
df = df.rename(columns=rename_dict, level=1)
df
100
Sensor 1 Sensor 2 Sensor 3 Sensor 4 Sensor 5
0 0.374540 0.950714 0.731994 0.598658 0.156019
1 0.155995 0.058084 0.866176 0.601115 0.708073
2 0.020584 0.969910 0.832443 0.212339 0.181825
3 0.183405 0.304242 0.524756 0.431945 0.291229
4 0.611853 0.139494 0.292145 0.366362 0.456070
由于您希望在 first 级别(而不是第0级)上应用重命名操作,请传递level=1
。