Pandas重塑和堆叠数据框

4
我有一个按照此格式排列的Excel表格:
Source Hour Min1  Min2  Min3
online 0    0     0     0
online 1    1     2     0
online 2    3     4     5

我怎样使用pandas将其转换为这个格式?

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
2个回答

2

只需执行T,请注意我建议将Source保留在列的第一级。

out = stacked.to_frame(0).T

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

为了得到预期的正确顺序输出,我们可以使用 swaplevelsort_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

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