【问题标题】:How to add prefix to multi index columns at particular level?如何在特定级别为多索引列添加前缀?
【发布时间】:2020-01-04 12:13:55
【问题描述】:

假设我有一个数据框

micolumns = pd.MultiIndex.from_tuples([('a', 'foo'), ('a', 'bar'),
                                       ('b', 'foo'), ('b', 'bah')])

miindex=np.arange(3)
dfmi = pd.DataFrame(np.arange(3 * len(micolumns)).reshape((len(miindex), len(micolumns))),
                     index=miindex, columns=micolumns).sort_index().sort_index(axis=1)

  a       b    
  bar foo bah foo
0   1   0   3   2
1   5   4   7   6
2   9   8  11  10

我想在零级的列中添加前缀,我该怎么做?

目前我正在重命名下面的列,感觉是多余的。

df_new = dfmi.rename(columns=dict(zip(dfmi.columns.levels[0],'pre_'+dfmi.columns.levels[0])),level=0) 

    pre_a     pre_b    
    bar foo   bah foo
0     1   0     3   2
1     5   4     7   6
2     9   8    11  10

add_prefix 函数没有级别参数。有没有类似的功能?

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    我会做什么

    s=dfmi.columns.to_frame()
    s[0]+='XXXX'
    dfmi.columns=pd.MultiIndex.from_frame(s)
    dfmi
    0 aXXXX     bXXXX    
    1   bar foo   bah foo
    0     1   0     3   2
    1     5   4     7   6
    2     9   8    11  10
    

    【讨论】:

      【解决方案2】:

      一种不寻常的方式是:

      dfmi.stack(level=1).add_prefix('pre_').unstack().dropna(how='all',axis=1)
      

        pre_a      pre_b      
          bar  foo   bah   foo
      0   1.0  0.0   3.0   2.0
      1   5.0  4.0   7.0   6.0
      2   9.0  8.0  11.0  10.0
      

      【讨论】:

        【解决方案3】:

        一个快速的方法是:

        dfmi.columns = pd.MultiIndex.from_tuples([(f'pre_{a}',b) for a,b in dfmi.columns])
        

        renamemapper

        dfmi.rename(mapper=lambda x: f'pre_{x}', 
                    axis='columns',
                    level=0,
                    inplace=True)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          • 2020-12-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多