一尘不染

高效扁平化pandas数据框

python

我有一个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)})

最有效的方法是什么?

谢谢,

插口


阅读 407

收藏
2021-01-20

共1个答案

一尘不染

选项1
无法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

选项2
另一个简单的选项 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
2021-01-20