我想将数据帧从宽列转换为长列,从多列变为两列,同时保留索引。我在下面尝试过使用melt。请让我知道我在想什么。
n.b。实际的数据框将具有数百列,因此我无法在代码中列出它们。
创建数据框:
df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'),index = ['jan','feb','mar'])
输出:
A B C
jan 76 7 72
feb 29 15 69
mar 4 24 9
融化数据框:
df2 = pd.melt(df.reset_index())
输出:
variable value
0 index jan
1 index feb
2 index mar
3 A 76
4 A 29
5 A 4
6 B 7
7 B 15
8 B 24
9 C 72
10 C 69
11 C 9
所需的输出:
variable value
jan A 76
feb A 29
mar A 4
jan B 7
feb B 15
mar B 24
jan C 72
feb C 69
mar C 9
答案 0 :(得分:2)
通过df.melt
,您可以将'index'
用作索引的名称,然后将'index'列设置回索引并重命名:
df.reset_index().melt('index').set_index('index').rename_axis(None)
使用df.stack
也可以在下面使用:
(df.stack().rename_axis([None,'variable']).reset_index(-1,name='value')
.sort_values('variable'))
variable value
jan A 76
feb A 29
mar A 4
jan B 7
feb B 15
mar B 24
jan C 72
feb C 69
mar C 9