我有一个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)})
最有效的方法是什么?
谢谢,
插口
选项1 无法100%确定效率,但最简单的方法是使用 df.melt 。
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
选项2 另一个简单的选项 stack -
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