Я хочу получить оба уровня мультииндекса данных, чтобы я мог повторно индексировать фреймворк данных на основе этого.Получение обоих уровней мультииндекса для повторной индексации фрейма данных
Возьмите dataframe:
import pandas as pd
import numpy as np
dates = pd.date_range('20070101',periods=3200)
df = pd.DataFrame(data=np.random.randint(0,100,(3200,1)), columns =list('A'))
df['date'] = dates
df = df[['date','A']]
Применить функцию сезона к индексу даты и времени
def get_season(row):
if row['date'].month >= 3 and row['date'].month <= 5:
return '2'
elif row['date'].month >= 6 and row['date'].month <= 8:
return '3'
elif row['date'].month >= 9 and row['date'].month <= 11:
return '4'
else:
return '1'
Применить функцию
df['Season'] = df.apply(get_season, axis=1)
Создать столбец 'Year' для индексации
df['Year'] = df['date'].dt.year
Multi-индекс по годам и сезон
df = df.set_index(['Year', 'Season'], inplace=False)
Группа данные
df2 = df['A'].groupby(level=['Year','Season']).mean()
Когда я запрашиваю это на первом уровне:
df2.index.get_level_values(0)
Я получаю лет:
Out[4]:
Int64Index([2007, 2007, 2007, 2007, 2008, 2008, 2008, 2008, 2009, 2009, 2009,
2009, 2010, 2010, 2010, 2010, 2011, 2011, 2011, 2011, 2012, 2012,
2012, 2012, 2013, 2013, 2013, 2013, 2014, 2014, 2014, 2014, 2015,
2015, 2015, 2015],
dtype='int64', name=u'Year')
и второй уровень:
df2.index.get_level_values(1)
Я получаю сезоны:
Out[6]:
Index([u'1', u'2', u'3', u'4', u'1', u'2', u'3', u'4', u'1', u'2', u'3', u'4',
u'1', u'2', u'3', u'4', u'1', u'2', u'3', u'4', u'1', u'2', u'3', u'4',
u'1', u'2', u'3', u'4', u'1', u'2', u'3', u'4', u'1', u'2', u'3', u'4'],
dtype='object', name=u'Season')
Но я хочу оба года и сезоны связаны с Афоризм - так что я могу повторно указателю dataframe на основе как год и сезон, оба уровня мультииндекс.
То есть - я хочу ([2007;1 , 2007;2 , 2007;3])
и т.д.
Возможно ли это сделать? Благодарю.
Это работает, но когда я пытаюсь переиндексации в dataframe с помощью этого: 'df3.reindex (NewIndex)' дает ошибку 'Exception: (спасибо!)! Не может справиться с неединственным мультииндексом' - это вероятно, является отдельным вопросом ... – Pad
Ах - получил его 'df.loc [newindex]' – Pad