将pandas multiindex折叠为单个索引

时间:2018-01-24 21:27:12

标签: python pandas datetime

我有一个多索引的Pandas数据框,如下所示:

enter image description here

如何将三层索引合并为一个索引?也就是说,我想把(1987,1,2)变成pd.datetime(1987,1,2)。我更喜欢使用df.index.map的矢量化方法。这里的代码可以创建数据框的顶部:

df = pd.DataFrame(
    {'3 months': [1, 2, 3, 4, 5]},
    index=[
        [1987, 1987, 1987, 1987,1987],
        [1,1,1,1,1],
        [2,5,6,7,8]
    ]
)

2 个答案:

答案 0 :(得分:5)

pd.Index.map

最简单的解决方案
df.set_index(df.index.map(lambda t: pd.datetime(*t)))

            3 months
1987-01-02         1
1987-01-05         2
1987-01-06         3
1987-01-07         4
1987-01-08         5

答案 1 :(得分:3)

传递给数据框

df.index=pd.to_datetime(pd.DataFrame(df.index.values.tolist(), columns=['year','month','day']))
df
Out[669]: 
            3 months
1987-01-02         1
1987-01-05         2
1987-01-06         3
1987-01-07         4
1987-01-08         5