2017-03-31 20 views
-1

私は、次のデータフレームを持っている:計算した最大値

my_index = ['2005-03-20', '2008-03-20', '2014-03-20', '2007-08-15', '2012-08-15', '2007-12-31', '2011-12-31', '2013-12-31', '2014-12-31'] 
df = pd.DataFrame([42, 51, 36, 217, 228, -56, -50, -66, -32], index = my_index, columns = ['Temperature']) 
df.index = pd.to_datetime(df.index) 

次のようになります。私が欲しいもの

  Temperature 
2005-03-20   42 
2008-03-20   51 
2014-03-20   36 
2007-08-15   217 
2012-08-15   228 
2007-12-31   -56 
2011-12-31   -50 
2013-12-31   -66 
2014-12-31   -32 

には計算され期間2005-2014にわたる1日の最大値。 所望の出力は、この1のようになります。

 Temperature 
03-20   51 
08-15   228 
12-31   -32 

任意のアイデア?どうも。

答えて

3

あなたはstrftimeによって作成Seriesgroupbyを使用することができます。

print (df.groupby(df.index.strftime('%m-%d')).max()) 
     Temperature 
03-20   51 
08-15   228 
12-31   -32 

numpy.in1dによって作成maskでのフィルタリングの使用boolean indexingのために、あまりにもyearリターンnumpy arrayので:

mask = np.in1d(df.index.year, np.arange(2005, 2015)) 
print (df[mask].groupby(df.index.strftime('%m-%d')).max()) 
     Temperature 
03-20   51 
08-15   228 
12-31   -32 
+0

グレート!ありがとうございました –

関連する問題