2017-07-28 123 views
0

我正在尋找一種方法來反向旋轉數據幀。就我所知,熊貓提供了一個pivot或pivot_table方法來將EAV df轉換爲「正常」方法。但是,有沒有辦法做相反的事情?堆棧數據幀列(熊貓)

所以給出的數據框:

$df userid A B C 0 1 1 0 1 1 3 1 2 1 5 0

我想將它轉換爲(一EAV模型):

$df E A V
0 A 1 0 B 1 0 C 0 1 A 1 1 B 3 1 C 1 2 A 1 2 B 5 2 C 0

什麼是這樣做的最有效的方法?

回答

3

假設userid被索引,df.stack將做到這一點:

In [133]: df.stack().reset_index().rename(columns={'userid' : 'E', 'level_1' : 'A', 0 : 'V'}) 
Out[133]: 
    E A V 
0 0 A 1 
1 0 B 1 
2 0 C 0 
3 1 A 1 
4 1 B 3 
5 1 C 1 
6 2 A 1 
7 2 B 5 
8 2 C 0 

如果userid不是指數,將其設置是這樣的:

df.set_index('userid', inplace=True)