У меня есть фрейм данных:
дф
Date Close Open
0 2012-01-02 348.36 342.19
1 2012-01-03 355.23 350.24
2 2012-01-04 354.00 352.84
3 2012-01-05 352.23 352.12
4 2012-01-06 351.24 351.97
df имеет 14000 строк.
Я хочу указать год и месяц groupby и получить фрейм данных multiindex.
df['Date'] = pd.to_datetime(df['Date'])
# df.set_index('Date',inplace=True,drop=True)
df1 = df.groupby([df.Date.dt.year.rename('year'),df.Date.dt.month.rename('month')]).values
Я пробовал .values.count (не дает ожидаемого результата).
ожидаемый результат:
df1
year month Date Close Open
2012 1 2012-01-02 348.36 342.19
2012-01-03 355.23 350.24
2012-01-04 354.00 352.84
2012-01-05 352.23 352.12
2012-01-06 351.24 351.97






df['Date'] = pd.to_datetime(df['Date'])
df1 = df.set_index([df.Date.dt.year.rename('year'),df.Date.dt.month.rename('month')])
df1 = df.set_index([df.Date.dt.year,df.Date.dt.month]).rename_axis(['year','month'])
print (df1)
Date Close Open
year month
2012 1 2012-01-02 348.36 342.19
1 2012-01-03 355.23 350.24
1 2012-01-04 354.00 352.84
1 2012-01-05 352.23 352.12
1 2012-01-06 351.24 351.97
Другие решения (более подробные):
df.index = pd.MultiIndex.from_arrays([df.Date.dt.year.rename('year'),
df.Date.dt.month.rename('month')])
df.index = pd.MultiIndex.from_arrays([df.Date.dt.year,
df.Date.dt.month], names=('year','month'))