2016-05-03 4 views
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が)

答えて

1
>>> df2.index.tolist() 
[(2007, '1'), 
(2007, '2'), 
(2007, '3'), 
(2007, '4'), 
(2008, '1'), 
(2008, '2'), 
(2008, '3'), 
(2008, '4'), 
... 
] 
+0

は、これは私がこれを使用してデータフレームのインデックスを再作成しようとしたときに動作しますおそらく別の質問です... – Pad

+0

ああ - それを 'df.loc [newindex]' – Pad

関連する問題