在Pandas中更改层级列名

2 投票
1 回答
2422 浏览
提问于 2025-04-18 14:31

假设我有一个数据框,它的索引是分层的:

>>> 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

或者最简单的方法就是重新创建一个新的索引(适用于所有列)。

撰写回答