Python 如何使用多索引对象作为方法链的一部分来重命名数据帧的列?

Python 如何使用多索引对象作为方法链的一部分来重命名数据帧的列?,python,pandas,Python,Pandas,我有一个包含数据的DataFrame和一个包含多级列名的多索引对象。有没有一种方法可以使用多索引对象将列名重命名为链的一部分 我知道我可以使用“pandas.DataFrame.columns”赋值来重命名列,但这需要一个单独的语句,这会破坏链 索引有一种类似的方法:“pandas.DataFrame.set_index”。它完全符合我的要求,但对于索引。对于列,我需要这样的方法 以下是我尝试的一个简短演示: import numpy as np import pandas as pd I

我有一个包含数据的DataFrame和一个包含多级列名的多索引对象。有没有一种方法可以使用多索引对象将列名重命名为链的一部分

我知道我可以使用“pandas.DataFrame.columns”赋值来重命名列,但这需要一个单独的语句,这会破坏链

索引有一种类似的方法:“pandas.DataFrame.set_index”。它完全符合我的要求,但对于索引。对于列,我需要这样的方法

以下是我尝试的一个简短演示:

import numpy as np
import pandas as pd



In [71]:testdf = pd.DataFrame(np.random.rand(6,4))

In [72]:testdf
Out[72]: 
          0         1         2         3
0  0.557704  0.827760  0.160876  0.107557
1  0.538251  0.817143  0.444935  0.665006
2  0.235694  0.721285  0.318727  0.220839
3  0.765107  0.776936  0.993133  0.127687
4  0.416877  0.121863  0.059885  0.332443
5  0.181796  0.685475  0.677187  0.399419

In [73]:cols = pd.MultiIndex.from_tuples(
                (("A", "1"), ("A", "2"),
                 ("B", "1"), ("B", "1")),
                names=("main", "sub"))
In [74]:cols
Out[74]:MultiIndex(levels=[['A', 'B'], ['1', '2']],
           codes=[[0, 0, 1, 1], [0, 1, 0, 0]],
           names=['main', 'sub'])

In [75]:
(testdf
    .divide(6)
    .rename(cols, axis='columns'))
Out[75]: 
TypeError: 'MultiIndex' object is not callable

我期待着:

In [76]:testdf
Out[76]: 
main         A                   B          
sub          1         2         1         1
0     0.099468  0.105746  0.115839  0.139009
1     0.107165  0.024658  0.063040  0.165303
2     0.131601  0.111327  0.040034  0.019957
3     0.128644  0.091933  0.060455  0.128705
4     0.092786  0.063429  0.080659  0.084506
5     0.005722  0.120841  0.072167  0.131921

听起来你想要设置索引,但需要转置? 给你:

testdf.divide(6).T.set_index(cols).T

是的,这将产生我想要的。谢谢你的帮助!