我有一个采用这种格式的Excel工作表:
Source Hour Min1 Min2 Min3
online 0 0 0 0
online 1 1 2 0
online 2 3 4 5
如何使用熊猫将其转换为这种格式?
Hour 0 1 2
Min1 Min2 Min3 Min1 Min2 Min3 Min1 Min2 Min3
0 0 0 1 2 0 3 4 5
我尝试了以下操作:
df= df.set_index(["Source", "Hour"])
stacked = df.stack()
但是我得到了这几乎是我所需要的,但实际上它需要旋转
Source Hour
online 0 Min1 0
Min2 0
Min3 0
1 Min1 1
Min2 2
Min3 0
2 Min1 3
Min2 4
Min3 5
答案 0 :(得分:2)
只需T
,请注意,我建议将Source
保留为该列的第一级
out = stacked.to_frame(0).T
答案 1 :(得分:0)
我认为您正在寻找的是unstack
:
out = df.set_index(['Source','Hour']).unstack('Hour')
或者类似地,pivot
:
out = df.pivot('Source', 'Hour')
输出
Min1 Min2 Min3
Hour 0 1 2 0 1 2 0 1 2
Source
online 0 1 3 0 2 4 0 0 5
要获得正确的排序作为预期的输出,我们可以执行swaplevel
和sort_index
:
out.swaplevel(0,1, axis=1).sort_index(axis=1)
输出:
Hour 0 1 2
Min1 Min2 Min3 Min1 Min2 Min3 Min1 Min2 Min3
Source
online 0 0 0 1 2 0 3 4 5