将pandas数据帧转换为另一种布局

时间:2018-01-01 12:24:36

标签: python pandas dataframe

我有一个如下所示的数据框:

  column1  column2  column3
0       A    0.020     0.76
1       B    0.045     1.30
2       C    0.230     0.32
3       D    0.130     0.67

我想修改此数据框结构,使其如下所示:

column1  newCol 
A        column2    0.020
         column3    0.760
B        column2    0.045
         column3    1.300
C        column2    0.230
         column3    0.320
D        column2    0.130
         column3    0.670
Name: value, dtype: float64

其中column1column2column3newCol是列的名称 A,B,C,D是行的唯一值

我的问题是我不知道如何将column1column2从列转换为新数据框中的行。

2 个答案:

答案 0 :(得分:2)

column1设置为索引,堆叠并重命名索引列:

>>> res = df.set_index('column1').stack()
>>> res.index.names = ['column1', 'newCol']
>>> res

column1  newCol 
A        column2    0.020
         column3    0.760
B        column2    0.045
         column3    1.300
C        column2    0.230
         column3    0.320
D        column2    0.130
         column3    0.670
dtype: float64

答案 1 :(得分:1)

使用melt + set_index + sort_index -

df.melt('column1', var_name='newCol')\
  .set_index(['column1', 'newCol'])\
  .sort_index().value

column1  newCol 
A        column2    0.020
         column3    0.760
B        column2    0.045
         column3    1.300
C        column2    0.230
         column3    0.320
D        column2    0.130
         column3    0.670
Name: value, dtype: float64

适用于v0.20及以上。对于旧版本,请改用pd.melt