2017-08-24 77 views
0

我有一個下面轉動多隻大熊貓數據幀結構:大熊貓多級數據幀熔體

 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']) 

上面的代碼讓我看到了pivoted f rame,原始幀是需要的輸出。所以基本上,我旋轉了一個數據框,現在想融化它以恢復到同樣的結構。

原始數據幀:

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  

任何幫助表示讚賞!謝謝!

+2

能否請你添加一些代碼來生成這些dataframes。我們很難像這樣複製您的數據。謝謝! –

+0

@COLDSPEED添加了一些代碼讓我知道它是否有幫助。 –

+0

@howardroark您可以添加原始數據框/代碼來生成_that_,以便我們可以使用您的代碼來獲取旋轉的代碼? –

回答

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 
+0

它完全失去了VC欄記錄 –

+0

@howardroark好的,那個編輯。 –

+0

我得到了同樣的結果。問題是dropna(),分配給VC對應列的值是NA。因此,使用dropna()刪除VC列值 –