转置Pandas DataFrame并将列标题更改为列表

20
我有以下的 Pandas 子数据框:
         col1  name1  name2
522      a     10     0.2
1021     b     72    -0.1

col1没有重复值。我想要转置数据框并将列标题更改为col1的值。理想情况下,输出应该如下所示:

Variable  a     b
name1     10    72
name2     0.2  -0.1

很容易转置df并将第一列标记为变量

df.transpose().reset_index().rename(columns={'index':'Variable'})

生成的数据框将原始数据框的索引作为列标题(它们未排序且不从1开始!)。我该如何更改其余列的名称?

2个回答

42

需要使用set_indexT

df = df.set_index('col1').T
print (df)
col1      a     b
name1  10.0  72.0
name2   0.2  -0.1

df = df.set_index('col1').T.rename_axis('Variable').rename_axis(None, 1)
print (df)
             a     b
Variable            
name1     10.0  72.0
name2      0.2  -0.1

如果需要从索引中获取列:
df = df.set_index('col1').T.rename_axis('Variable').rename_axis(None, 1).reset_index()
print (df)
  Variable     a     b
0    name1  10.0  72.0
1    name2   0.2  -0.1

0

也可以通过结合使用 meltpivot 来完成任务。思路是

df = df.melt('col1').pivot('variable', 'col1', 'value').reset_index().rename_axis(columns=None)

或者使用 set_indexunstack 两次:

df = df.set_index('col1').unstack().unstack().reset_index(names='Variable').rename_axis(columns=None)

res


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接