【发布时间】:2020-02-21 10:11:44
【问题描述】:
我有一个包含数据的 pandas DataFrame,以及一个包含多级列名的 MultiIndex 对象。有没有办法可以使用该多索引对象将列名重命名为链的一部分?
我知道我可以使用“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
【问题讨论】: