熊猫多级数据帧融化



我有一个透视的多级熊猫数据帧结构:

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      

任何帮助不胜感激!谢谢!

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

最新更新