Фрейм данных set_index создает дублированные значения индекса вместо иерархической группировки - PullRequest
0 голосов
/ 22 мая 2018

У меня есть фрейм данных, который выглядит следующим образом (индекс не показан)

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?

1 Ответ

0 голосов
/ 22 мая 2018

В качестве индекса необходимо также указать тип

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    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...