将多索引级别重塑为列

时间:2018-12-12 21:31:26

标签: pandas dataframe

我有一个带有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 :(得分:0)

df = df.stack(level=0)
df = df.reset_index(level=1)
df = df.rename(columns={'level_1': 'month'})

然后我需要再做一个reset_index(),新列"index"(但不包括实际索引)包含user_id