使用Pandas创建多级列

2024-04-24 16:25:49 发布

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

给出如下df

作为pd进口熊猫

task=['Task',"Task","Task","Task","Task","Task",'Task','Task',"Task","Task","Task","Task","Task",'Task','Task',"Task"]
ba=['SA','SA','SA','SA','SA','SA','SA','SA','SB','SB','SB','SB','SB','SB','SB','SB']
bb=['C1','C1','C2','C2','C1','C1','C2','C2','C1','C1','C2','C2','C1','C1','C2','C2']

nn=['T1','T1','T1','T1','T2','T2','T2','T2','T1','T1','T1','T1','T2','T2','T2','T2']
val=[0.244130039,0.124959401,0.212280307,0.111595529,0.162715589,0.097576324,0.219837052,0.138536738,0.118780642,0.047991315,0.092171826,0.046345554,0.170150394,0.110773621,0.076100716,0.042808913,]

df = pd.DataFrame(list(zip(task,ba,bb,nn,val)),columns =['mtask', 'sub','task','type','var'])

如何生成如图所示的多级列

enter image description here

另外,在实际情况中,有多个类似于var的列。感谢您提出的任何可以概括这一点的建议


2条回答

如果将task重新标记为

task = ['Task1','Task2'] * 8

然后您可以使用:

pivoted = df.pivot_table(values="var", index=["mtask", "sub"], columns=["task", "type"])
pivoted.sort_index(level=1)

产出:

它与pd.pivot_table尽可能接近,因为该函数希望使用相同的索引聚合(默认情况下平均)值

这里有一个建议:

cols = ['mtask','sub', 'task', 'type']
df.set_index(cols + [df.groupby(['mtask','sub', 'task', 'type']).cumcount()])['var'].unstack(['task', 'type'])

输出:

task               C1        C2        C1        C2
type               T1        T1        T2        T2
mtask sub                                          
Task  SA  0  0.244130  0.212280  0.162716  0.219837
          1  0.124959  0.111596  0.097576  0.138537
      SB  0  0.118781  0.092172  0.170150  0.076101
          1  0.047991  0.046346  0.110774  0.042809

尝试获取额外级别的信息:

cols = ["mtask", "sub", "tasklvl", "task", "typelvl", "type", "varlvl"]
df.assign(typelvl="Type", tasklvl="task", varlvl="var").set_index(
    cols + [df.groupby(["mtask", "sub", "task", "type"]).cumcount()]
)["var"].unstack(["tasklvl", "task", "typelvl", "type", "varlvl"]).sort_index(axis=1)

输出:

tasklvl          task                              
task               C1                  C2          
typelvl          Type                Type          
type               T1        T2        T1        T2
varlvl            var       var       var       var
mtask sub                                          
Task  SA  0  0.244130  0.162716  0.212280  0.219837
          1  0.124959  0.097576  0.111596  0.138537
      SB  0  0.118781  0.170150  0.092172  0.076101
          1  0.047991  0.110774  0.046346  0.042809

相关问题 更多 >