熊猫为列构造多索引

问题描述

如何为以下示例数据框在熊猫中构建多索引:

import pandas as pd
df = pd.DataFrame({'day':['2020-01-01','2020-01-02'],'value_mean':[1,5],'value_max':[40,100]})

改变现有的:

          day  value_mean  value_max
0  2020-01-01           1         40
1  2020-01-02           5        100

类似:

                            value
          day         mean        max
0  2020-01-01           1         40
1  2020-01-02           5        100

解决方法

没有MultiindexMultiIndex columns的连接问题,唯一的技巧是在第二级使用空字符串:

df.columns = df.columns.str.split('_',expand=True)
df = df.rename(columns = lambda x: x if pd.notna(x) else '')
print (df)
          day value     
               mean  max
0  2020-01-01     1   40
1  2020-01-02     5  100

print (df.columns)
MultiIndex([(  'day',''),('value','mean'),'max')],)

如果要清除,请不要在级别中输入空字符串值:

df = df.set_index('day')
df.columns = df.columns.str.split('_',expand=True)
print (df)
           value     
            mean  max
day                  
2020-01-01     1   40
2020-01-02     5  100
,

另一个选择:

df.columns = pd.MultiIndex(levels=[['value','day'],['mean','max','']],codes=[[1,0],[2,1]])

输出:

    day         value
                mean    max
0   2020-01-01  1       40
1   2020-01-02  5       100