2017-07-28 93 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)