高效扁平化pandas数据框
我有一个pandas数据框。看起来像这样:
pd.DataFrame(data=np.arange(1,10).reshape(3,3), index=['A', 'B', 'C'], columns=['A', 'B', 'C'])
但有100行和100列。
我想展平它,使其看起来像这样:
pd.DataFrame({'row' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'col' : ['A', 'B', 'C']*3, 'val' : np.arange(1,10)})
最有效的方法是什么?
谢谢,
插口
回答:
无法100%确定效率,但最简单的方法是使用 df.melt
。
df.rename_axis('row')\ .reset_index()\
.melt('row', value_name='val', var_name='col')\
.sort_values(['row', 'col'])
row col val
0 A A 1
3 A B 2
6 A C 3
1 B A 4
4 B B 5
7 B C 6
2 C A 7
5 C B 8
8 C C 9
另一个简单的选项 stack
-
v = df.stack().reset_index()v.columns=['row', 'col', 'val']
v
要么,
df.stack().rename_axis(['row', 'col']).reset_index(name='val') row col val
0 A A 1
1 A B 2
2 A C 3
3 B A 4
4 B B 5
5 B C 6
6 C A 7
7 C B 8
8 C C 9
以上是 高效扁平化pandas数据框 的全部内容, 来源链接: utcz.com/qa/405822.html