Dataframe set_index生成重复的索引值,而不是进行分层分组

时间:2018-05-22 18:01:35

标签: python pandas dataframe

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

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,然后将最后一个索引Type取消堆叠。

我们说我的原始数据框名为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

当我创建索引类型之一时会发生相同的行为,它只是变为粗体作为索引。

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

1 个答案:

答案 0 :(得分:1)

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

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