我有一个如下所示的数据框:
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
其中column1
,column2
,column3
,newCol
是列的名称
A,B,C,D是行的唯一值
我的问题是我不知道如何将column1
和column2
从列转换为新数据框中的行。
答案 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
。