熊猫:将多索引降低到最高可用水平

时间:2018-10-04 15:05:29

标签: python pandas multi-index

我具有以下类型的数据框,其值按3个不同的类别A,B,C分组:

import pandas as pd
A = ['A1', 'A2', 'A3', 'A2', 'A1']
B = ['B3', 'B2', 'B2', 'B1', 'B3']
C = ['C2', 'C2', 'C3', 'C1', 'C3']
value = ['6','2','3','3','5']

df = pd.DataFrame({'categA': A,'categB': B, 'categC': C, 'value': value})
df

外观如下:

  categA categB categC value
0     A1     B3     C2     6
1     A2     B2     C2     2
2     A3     B2     C3     3
3     A2     B1     C1     3
4     A1     B3     C3     5

现在,当我想按C类来分解此df时,.unstack()返回一些多索引数据框,其第一级为“值”,第二级为我感兴趣的类别C1,C2和C3:

df = df.set_index(['categA','categB','categC']).unstack('categC')
df

输出:

              value          
categC           C1   C2   C3
categA categB                
A1     B3       NaN    6    5
A2     B1         3  NaN  NaN
       B2       NaN    2  NaN
A3     B2       NaN  NaN    3

是否有一种快速,干净的方法通过将多索引降低到最高可用水平来消除它?这就是我想要的输出:

categA categB   C1   C2   C3                
A1     B3       NaN    6    5
A2     B1         3  NaN  NaN
       B2       NaN    2  NaN
A3     B2       NaN  NaN    3

非常感谢!

编辑:

print(df.reset_index())

给予:

           categA categB value          
categC                  C1   C2   C3
0          A1     B3   NaN    6    5
1          A2     B1     3  NaN  NaN
2          A2     B2   NaN    2  NaN
3          A3     B2   NaN  NaN    3

1 个答案:

答案 0 :(得分:0)

还将reset_indexunstack添加Series

df.set_index(['categA','categB','categC']).value.unstack('categC').reset_index()
Out[875]: 
categC categA categB    C1    C2    C3
0          A1     B3  None     6     5
1          A2     B1     3  None  None
2          A2     B2  None     2  None
3          A3     B2  None  None     3