Pandas DataFrame:如何创建多列索引

3

我有一个类似于这样的pandas DataFrame:

          player     frameID    x          y  
  
0         Tom        0          1          3
1         Tom        1          2          3
2         Tom        2          1          3
3         John       0          4          2
4         John       1          3          1
5         John       2          2          2
6         Greg       0          5          3
7         Greg       1          3          2
8         Greg       2          2          1
.         .          .          .          .
.         .          .          .          .
.         .          .          .          .

我希望将它格式化成这样:

          player  Tom           John          Greg
frameID    
                  x      y      x      y      x      y

0                 1      3      4      2      5      3
1                 2      3      3      1      3      2
2                 1      3      2      2      2      1
.                 .      .      .      .      .      .
.                 .      .      .      .      .      .
.                 .      .      .      .      .      .

然而,我不知道如何进行多级索引。正如您所看到的,我想将其中两列作为索引放置在列和行上。任何帮助都将不胜感激。


顺便问一句:为什么你想要一个多级索引?我发现几乎所有的事情都可以用列值来完成(除非你需要更好的性能)。 - anon01
数据是运动数据,每一行都是一个运动比赛的帧。我想要它以这种格式,因为我需要在聚类算法中使用每个帧中所有球员的位置(即在这种格式下,每行现在恰好有我需要的数据)。 - Evan Pfeifer
1个回答

3

让我们创建一个多层索引,然后使用 stack + unstack 来重塑数据框:

df.set_index(['frameID', 'player']).stack().unstack([1, 2])

player    Tom     John    Greg   
          x  y    x  y    x  y
frameID                       
0         1  3    4  2    5  3
1         2  3    3  1    3  2
2         1  3    2  2    2  1

很好!什么时候会使用多级(列)索引? - anon01
感谢@anon01。根据pandas文档,当数据具有逻辑相关结构时,MultiIndex通常用于更简洁地进行分组、选择和重塑操作。我建议您查看文档,您还可以参考此答案,其中很好地解释了何时使用MultiIndex。 - Shubham Sharma
1
伙计,你真是救命恩人。非常感谢你。 - Evan Pfeifer

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