堆叠数据框列(Pandas)
Stacking dataframe columns (Pandas)
我正在寻找一种反向旋转数据框的方法。据我所知,pandas 提供了一个枢轴或 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<br>
0 一个 1
0 乙 1
0 C 0
1个1
1乙3
1 C 1
2个1
2乙5
2 C 0
最有效的方法是什么?
假设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)
我正在寻找一种反向旋转数据框的方法。据我所知,pandas 提供了一个枢轴或 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<br>
0 一个 1
0 乙 1
0 C 0
1个1
1乙3
1 C 1
2个1
2乙5
2 C 0
最有效的方法是什么?
假设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)