2017-03-07 43 views
0

假设我有一个数据表每月datetime索引(下面的代码给出了两年,一月至十二月):将DataFrame对象上的Pandas日期时间索引转换为* MultiIndex *级别为“month”和“year”

import pandas as pd 
import numpy as np 
from datetime import datetime 
N = 12*2 
c = [datetime(1970 + i//12, (i%12)+1, 1) for i in range(N)] 
d = pd.DataFrame(np.random.rand(N), index=c) 
print(d) 

什么是对DateTimeIndex转换成与单独的水平monthyear一个MultiIndex的最佳方式?也许有一种方法可以与groupby做到这一点,但我不确定。

回答

3

可以从yearmonth构建MultiIndex对象并将其分配给所述数据帧的指数:

import pandas as pd 
d.index = pd.MultiIndex.from_arrays([d.index.year, d.index.month]) 

d.index 
# MultiIndex(levels=[[1970, 1971], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]], 
#   labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]) 

d.head() 

#     0 
#1970 1 0.657130 
#  2 0.047241 
#  3 0.984799 
#  4 0.868508 
#  5 0.678536 
0
d.index = pd.MultiIndex.from_tuples(d.reset_index()['index'].\ 
            apply(lambda x:(x.year,x.month))) 
相关问题