【问题标题】:pandas: renaming column labels in multiindex df熊猫:重命名多索引df中的列标签
【发布时间】:2016-09-15 05:54:48
【问题描述】:

我有一个看起来像这样的 df:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([['1|mm','2|lll'],['A|ljjh','B|ldjdj']])

       1|mm               2|lll          
     A|ljjh   B|ldjdj    A|ljjh   B|ldjdj
0  0.599202  0.093917  0.582809  0.683346
1  0.902717  0.343215  0.222960  0.238709
2  0.808473  0.290253  0.276607  0.775530
3  0.197891  0.505197  0.243890  0.011838

我想像这样拆分每个级别的列标签:

columnlabel.split("|")[0]

我不确定最好的方法是什么?我应该创建一个新列表并将其分配给 df.columns 还是可以就地完成?

预期输出

     1                   2          
     A       B         A         B
0  0.599202  0.093917  0.582809  0.683346
1  0.902717  0.343215  0.222960  0.238709
2  0.808473  0.290253  0.276607  0.775530
3  0.197891  0.505197  0.243890  0.011838

【问题讨论】:

    标签: python pandas dataframe multiple-columns multi-index


    【解决方案1】:

    您可以使用get_level_valuessplit 进行解析,创建tuples 的新列表和最后一个新的MultiIndexfrom_tuples

    new_names = list(zip(df.columns.get_level_values(0).str.split('|').str[0],
                         df.columns.get_level_values(1).str.split('|').str[0]))
    print (new_names)      
    [('1', 'A'), ('1', 'B'), ('2', 'A'), ('2', 'B')]
    
    df.columns = pd.MultiIndex.from_tuples(new_names)
    print (df)
              1                   2          
              A         B         A         B
    0  0.400125  0.007743  0.423123  0.662878
    1  0.787079  0.314668  0.798404  0.702267
    2  0.451037  0.333846  0.030534  0.823515
    3  0.135365  0.785421  0.777839  0.248622
    

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 2020-09-04
      • 2017-03-24
      • 2021-12-07
      • 2019-07-28
      • 2017-01-23
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多