2017-03-07 1 views
0

sagen, dass ich eine Tabelle von Daten mit monatlichdatetime Indizes haben (der folgende Code gibt zwei Jahren Dezember Januar durch):Konvertieren eines Pandas Datetime-Index auf einem Datenframe-Objekt * Multiindex * mit den Ebenen „Monat“ und „Jahr“

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) 

Was ist der beste Weg, um die DateTimeIndex in eine MultiIndex mit den separaten Ebenenmonth und year zu konvertieren? Vielleicht gibt es einen Weg, dies mit groupby zu tun, aber ich bin mir nicht sicher.

Antwort

3

Sie können ein MultiIndex Objekt aus dem year konstruieren und month und weisen es den Index des Datenrahmen:

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))) 
Verwandte Themen