2017-03-07 81 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))) 
相關問題