Преобразовать индекс серии в столбцы df после группировки в Pandas - PullRequest
0 голосов
/ 01 февраля 2020

Следующий код

testIDs.groupby(
    ['id', pd.TimeGrouper(key='date',freq='20s')]
)['quadrant'].value_counts()

Дает мне:

Out[128]: 
id    date                 quadrant
2617  2019-10-08 18:47:40  4           1
      2019-10-08 18:54:00  1           1
                           3           1
      2019-10-08 18:54:40  0           1
                           3           1  
      2019-10-08 18:56:20  3           1
      2019-10-08 18:59:20  2           1
      2019-10-08 19:05:40  1           1
      2019-10-08 19:06:20  1           2
                           4           1
      2019-10-08 19:06:40  0           1
                           1           1
      2019-10-08 19:07:00  2           2
                           0           1
                           3           1
      2019-10-08 19:13:40  2           1
      2019-10-08 19:14:20  0           1
                           2           1
      2019-10-08 19:16:40  3           1
      2019-10-08 19:18:40  1           3
                           0           2
                           3           2
                           2           1
      2019-10-08 19:19:00  4           3
                           1           2
                           0           1
                           2           1
      2019-10-08 19:19:20  4           6
                           2           1
      2019-10-08 19:19:40  3           2
                                      ..
2855  2019-10-08 19:44:20  4           4
                           1           2
                           2           2
      2019-10-08 19:44:40  4           8
      2019-10-08 19:45:00  4           3
                           1           2
                           2           2
                           0           1
      2019-10-08 19:45:20  4           7
                           2           1
      2019-10-08 19:45:40  4           4
                           2           2
                           1           1
                           3           1
      2019-10-08 19:46:00  1           3
                           4           2
                           0           1
                           2           1
                           3           1
      2019-10-08 19:46:20  2           4
                           1           3
                           4           1
      2019-10-08 19:46:40  1           3
                           2           3
                           3           1
                           4           1
      2019-10-08 19:47:00  0           2
                           1           1
                           2           1
                           4           1
   Name: quadrant, Length: 714, dtype: int64

Окончательный результат должен быть тепловой картой с датой в качестве оси X и идентификатором в качестве оси Y, а квадрант считается как ценности. Я хочу сравнить идентификаторы в соответствии с квадрантами и количеством квадрантов во времени.

Для этого, как мне преобразовать эту серию в кадр данных с мультииндексом в виде столбцов df?

Большое спасибо за помощь !!

1 Ответ

0 голосов
/ 02 февраля 2020

Кажется, что все, что вам нужно, это сбросить индекс и использовать агрегирование для полного возврата кадра данных:

testIDs.groupby(
    ['id', pd.TimeGrouper(key='date',freq='20s')]
).agg({'quadrant':'count'}).reset_index()

Редактировать : Если ваш сектор также должен быть сгруппирован :

testIDs.groupby(
    ['id', pd.TimeGrouper(key='date',freq='20s'), 'quadrant']
).count().reset_index()

Обратите внимание, что если у вас много столбцов, он будет учитываться для всех столбцов.

...