【问题标题】:How to rename columns of a pandas DataFrame using MultiIndex object as part of a method chain?如何使用 MultiIndex 对象作为方法链的一部分重命名 pandas DataFrame 的列?
【发布时间】: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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    听起来你想要 set_index 但已转置? 给你:

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

    【讨论】:

    • 是的,这将产生我想要的结果。感谢您的帮助!
    猜你喜欢
    • 2017-03-05
    • 2017-05-04
    • 1970-01-01
    • 2019-08-06
    • 2017-10-10
    • 2019-10-28
    • 1970-01-01
    • 2019-02-08
    • 2017-11-15
    相关资源
    最近更新 更多