在Pandas中更改层级列名
假设我有一个数据框,它的索引是分层的:
>>> df = pd.DataFrame(np.ones((2, 4)))
>>> df
0 1 2 3
0 1 1 1 1
1 1 1 1 1
[2 rows x 4 columns]
>>> df.columns = pd.MultiIndex.from_product([['a', 'b'], ['i', 'ii']])
>>> df
a b
i ii i ii
0 1 1 1 1
1 1 1 1 1
[2 rows x 4 columns]
有没有简单的方法可以更改'b'下面的列名?我觉得下面的方法很直观,但它并没有奏效。
>>> df['b'].columns = ['iii', 'iv']
>>> df
a b
i ii i ii
0 1 1 1 1
1 1 1 1 1
[2 rows x 4 columns]
1 个回答
0
现在重命名一个有多层索引的列名有点麻烦(而且重命名本身对多层索引的处理也不太好)。如果是数据框的索引,那就比较简单,可以用 reset_index/rename/set_index
来操作。
所以有两种选择:(在0.15.0版本中会变得更简单);现在必须设置所有的层级,即使是那些你不打算更改的。
In [39]: df.columns = df.columns.set_levels([['iii','iv'],df.columns.levels[1]])
In [40]: df
Out[40]:
iii iv
i ii i ii
0 1 1 1 1
1 1 1 1 1
或者最简单的方法就是重新创建一个新的索引(适用于所有列)。