我有一个带有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
任何想法如何执行此操作?
答案 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
。