0
マルチインデックスデータフレームの両方のレベルを取得したいので、これに基づいてデータフレームを再インデックスすることができます。マルチインデックスの両方のレベルを取得してデータフレームを再インデックス化する
データフレームください:インデックス作成のための '年' の列を作成し適用する機能
df['Season'] = df.apply(get_season, axis=1)
を
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']]
はdatetime型のインデックス
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['Year'] = df['date'].dt.year
私は最初のレベルのためにこれを照会すると
年によるマルチインデックスとシーズン
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')
をしかし、私はお互いに関連した両年と季節をしたい - 私は再インデックスの両方の年に基づいてデータフレームをすることができますシーズン、マルチインデックスの両方のレベル。さ
- 私は([2007;1 , 2007;2 , 2007;3])
など
をしたいが、これは行うことは可能ですか?ありがとう。 (!ありがとう)! - この非独自のマルチインデックスを処理することはできません `:`エラー `例外を与える` df3.reindex(newIndexが)
は、これは私がこれを使用してデータフレームのインデックスを再作成しようとしたときに動作しますおそらく別の質問です... – Pad
ああ - それを 'df.loc [newindex]' – Pad