高效扁平化熊猫数据框

发布于 2021-01-29 14:10:00

我有一个熊猫数据框。看起来像这样:

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)})

最有效的方法是什么?

谢谢,

插口

关注者
0
被浏览
196
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    选项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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看