首页 > 解决方案 > 数据框 set_index 产生重复的索引值,而不是进行分层分组

问题描述

我有一个看起来像这样的数据框(未显示索引)

Time   Letter   Type    Value
    0    A       x       10
    0    B       y       20
    1    A       y       30
    1    B       x       40
    3    C       x       50

我想生成一个如下所示的数据框:

Time    Letter   TypeX    TypeY
  0        A      10       20
  0        B               20
  1        A               30
  1        B      40       
  3        C      50         

为此,我决定首先创建一个包含多个索引、Time、Letter 的表,然后取消堆叠最后一个索引类型。

假设我的原始数据框名为 my_table:

my_table.reset_index().set_index(['Time', 'Letter']) 而不是将其分组以便在每个时间索引下,字母都有 X 型和 Y 型,它们似乎已被排序(添加一些更多条目来证明一点):

Time(i) Letter(i)   Type    Value
    0    A       x       10
         D       x       25
         H       x       15
         G       x       33
    1    B       x       40
         G       x       10
    3    C       x       50
    0    B       y       20
         H       y       10
    1    A       y       30

为什么会这样?我期待这样的结果:

Time   Letter   Type    Value
    0    A       x       10
                 y       30
         B       y       20
         H       x       15
                 y       10
         D       x       25
         G       x       33
    1    B       x       40
         G       x       10
    3    C       x       50

当我将 Type 设为索引之一时,也会发生相同的行为,它只是变为粗体作为索引。

如何使用 Time 和 Letter 成功对列进行分组以使 X 和 Y 与这些列匹配,以便我可以成功使用 unstack?

标签: pythonpandasdataframe

解决方案


您还需要将类型设置为索引

df.set_index(['Time','Letter','Type']).Value.unstack(fill_value='').reset_index()
Out[178]: 
Type  Time Letter   x   y
0        0      A  10    
1        0      B      20
2        1      A      30
3        1      B  40    
4        3      C  50    

推荐阅读