熊猫多级数据帧融合

时间:2017-08-24 20:18:33

标签: python python-3.x pandas dataframe

我有以下支点多级pandas数据帧结构:

       Example1 Example2 Weight Rank Difference
VC                        X Y   X Y
0        ABC      XYZ     1 2   1 2     0
1        PQR      BCD     3 4   3 4     1

我想融合数据框并获得以下结构:

 VC Example1 Example2 Weight Rank Difference
 X    ABC       XYZ      1      1      0
 Y    ABC       XYZ      2      2      0
 X    PQR       BCD      3      3      1
 Y    PQR       BCD      4      4      1

代码:

df = df.pivot_table(index = 
['Example1','Example2'],columns='VC', values=
['Weight','Rank']).reset_index()
df['Difference'] = (df['rank']['X']-df['rank']['Y'])

上面的代码让我进入了旋转框架,原始框架是所需的输出。所以基本上,我转动了一个数据框,现在想要融化它以使其恢复到相同的结构。

原始数据帧:

 VC Example1 Example2 Weight Rank
 X    ABC       XYZ      1      1  
 Y    ABC       XYZ      2      2    
 X    PQR       BCD      3      3      
 Y    PQR       BCD      4      4      

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

IIUC,我认为您需要stackgroupbyffill

df2.stack(1).groupby(level=0).ffill().dropna().reset_index().drop('level_0', axis=1)

或者

df.fillna(9999999).stack(1).groupby(level=0).bfill().dropna(‌​).reset_index().drop‌​('level_0', axis=1)

实施例

df_in

  VC Example1 Example2  Weight  Rank
0  X      ABC      XYZ       1     1
1  Y      ABC      XYZ       2     2
2  X      PQR      BCD       3     3
3  Y      PQR      BCD       4     4

您的代码:

df2 = df_in.pivot_table(index = 
['Example1','Example2'],columns='VC', values=
['Weight','Rank']).reset_index()

df2['Difference'] = (df2['Rank']['X']-df2['Rank']['Y'])

DF2

   Example1 Example2 Rank    Weight    Difference
VC                      X  Y      X  Y           
0       ABC      XYZ    1  2      1  2         -1
1       PQR      BCD    3  4      3  4         -1

重塑:

df2.stack(1).groupby(level=0).ffill().dropna().reset_index().drop('level_0', axis=1)

输出:

  VC  Difference Example1 Example2  Rank  Weight
0  X        -1.0      ABC      XYZ   1.0     1.0
1  Y        -1.0      ABC      XYZ   2.0     2.0
2  X        -1.0      PQR      BCD   3.0     3.0
3  Y        -1.0      PQR      BCD   4.0     4.0