大Pandas:将多重索引降低到最高可用性

2024-10-02 16:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下类型的数据帧,值按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()返回一些多索引数据帧,第一级为'value',第二级为我感兴趣的类别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

Tags: a2dfvaluea1nanb2a3b1
1条回答
网友
1楼 · 发布于 2024-10-02 16:23:44

同时添加reset_indexunstackSeries

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

相关问题 更多 >