Pandas 如何使用熊猫转换df

Pandas 如何使用熊猫转换df,pandas,dataframe,transpose,Pandas,Dataframe,Transpose,我有以下数据帧片段: predictor b z pvalue model ss age_raw 1.026695 4.678675 2.89E-06 composite_outcome_nonenglish 1 elixsum 1.228125 8.514571 1.67E-17 composite_outcome_nonenglish 1 age_raw 1.087716 0.228507 0.819252

我有以下数据帧片段:

predictor   b   z   pvalue  model   ss
age_raw 1.026695    4.678675    2.89E-06    composite_outcome_nonenglish    1
elixsum 1.228125    8.514571    1.67E-17    composite_outcome_nonenglish    1
age_raw 1.087716    0.228507    0.819252    composite_outcome_english   0
elixsum 1.760882    1.68492     0.092004    composite_outcome_english   0
我需要将
model
作为最高级别,将(
b
z
pvalue
ss
)作为第二级别,将
预测器作为行,转换为多索引列数据帧:

                    model                              model
          composite_outcome_nonenglish            composite_outcome_english 
           b        z           pvalue   ss           b         z           pvalue  ss
age_raw 1.026695    4.678675    2.89E-06 0            1.087716  0.228507    0.819252 1
elixsum 1.228125    8.514571    1.67E-17 0            1.760882  1.68492     0.092004 1  

我尝试过各种分组,以及堆叠和拆垛等,但就我个人而言,我无法正确地实现这一点。

你想要
pivot
swaplevel

(df.pivot(index='predictor', columns='model')
   .swaplevel(0,1, axis=1)
   .sort_index(axis=1)
)
输出:

model       composite_outcome_english               composite_outcome_nonenglish
            b           pvalue      ss  z           b           pvalue      ss          z
predictor                               
age_raw     1.087716    0.819252    0   0.228507    1.026695    2.890000e-06    1   4.678675
elixsum     1.760882    0.092004    0   1.684920    1.228125    1.670000e-17    1   8.514571

使用
unstack
+
stack

out = df.set_index(['predictor','model']).stack().unstack(level=[1,2])
Out[366]: 
model     composite_outcome_nonenglish            ... composite_outcome_english     
                                     b         z  ...                    pvalue   ss
predictor                                         ...                               
age_raw                       1.026695  4.678675  ...                  0.819252  0.0
elixsum                       1.228125  8.514571  ...                  0.092004  0.0

这是我走的路线,但我被卡在上面了。这是我接受这个答案的唯一原因。