堆叠数据帧列(Pandas)

时间:2017-07-28 14:27:29

标签: python pandas pivot-table entity-attribute-value

我正在寻找一种反向旋转数据框的方法。据我所知,pandas提供了一个pivot或pivot_table方法来将EAV df转换为" normal"一。但是,还有一种方法可以做反向吗?

所以给出了数据帧:

$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

最有效的方法是什么?

1 个答案:

答案 0 :(得分:5)

假设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)