Преобразование многоиндексных уровней в столбцы - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть фрейм данных со столбцами MultiIndex, например:

        2018-07-01  2018-08-01  2018-09-01  2018-10-01
user_id x   y   z   x   y   z   x   y   z   x   y   z
2153    3   39  29  11  39  2   11  47  27  4   12  25
2154    22  31  32  9   25  3   9   29  36  8   2   19
2155    5   18  29  6   31  89  9   40  10  18  16  22
2156    18  49  18  4   14  116 4   12  23  17  9   12
2157    5   20  1   7   29  31  2   31  22  7   22  21
2158    4   19  19  32  12  26  3   19  26  12  38  3
2159    19  39  4   4   22  13  28  41  48  4   3   37

Это означает, что:

In [1]: df.columns
Out[1]: MultiIndex(levels=[[2018-07-01 00:00:00, 2018-08-01 00:00:00, 2018-09-01 00:00:00, 2018-10-01 00:00:00], [u'x', u'y', u'z']],
       labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]],
       names=[None, u'user_id'])

Я бы хотел получить его в длинном формате, чтобычто даты (в данном случае месяц) указаны в новом столбце, так что я могу начать группировку по (user, month)

Это должно выглядеть примерно так:

user_id       month   x   y   z
2153     2018-07-01   3   39  29
2153     2018-08-01   11  39  2
2153     2018-09-01   11  47  27
2153     2018-10-01   4   12  25
...
...
2159     2018-10-01   4   3   37

Любые идеикак сделать эту операцию?

1 Ответ

0 голосов
/ 13 декабря 2018
df = df.stack(level=0)
df = df.reset_index(level=1)
df = df.rename(columns={'level_1': 'month'})

Затем мне нужно было сделать еще reset_index(), и новый столбец "index" (но не фактический индекс) содержит user_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...