我希望使用python3对pandas DataFrame
进行特定操作。我想将 NxK DataFrame
折叠为 NKx3 DataFrame
,其中包含三列:条目,列和原始索引DataFrame
。这是一个例子:
'a' 'b' 'c'
'e' 1 2 3
'f' 4 5 6
期望的输出:
0 1 2
0 1 'a' 'e'
1 4 'a' 'f'
2 2 'b' 'e'
3 5 'b' 'f'
4 3 'c' 'e'
5 6 'c' 'f'
我正在寻找一种实现这一目标的pythonic优雅方式,但是当我处理非常大的数据帧时,最高优先级是效率。
答案 0 :(得分:6)
pandas
使用unstack
+ reset_index
df.unstack().reset_index()
level_0 level_1 0
0 a e 1
1 a f 4
2 b e 2
3 b f 5
4 c e 3
5 c f 6
完全复制你拥有的东西
df.unstack().rename_axis([1, 2]).reset_index().sort_index(1)
0 1 2
0 1 a e
1 4 a f
2 2 b e
3 5 b f
4 3 c e
5 6 c f
numpy
v = df.values
pd.DataFrame({
0: v.ravel('F'),
1: df.columns.values.repeat(v.shape[0]),
2: np.tile(df.index.values, v.shape[1])
})
0 1 2
0 1 a e
1 4 a f
2 2 b e
3 5 b f
4 3 c e
5 6 c f