2015-09-13 93 views
1

在下面的數據框中(小片段顯示,實際數據幀跨越2000年到2014年),我想計算年平均值,但是從9月份開始計算一年,只有明年五月。大熊貓數據集的年平均值但不是從1月份開始

Cnt Year JD Min_Temp 
S 2000 1 277.139 
S 2000 2 274.725 
S 2001 1 270.945 
S 2001 2 271.505 
N 2000 1 257.709 
N 2000 2 254.533 
N 2000 3 258.472 
N 2001 1 255.763 

我可以計算全年平均值(1至12月)使用此代碼:

df['Min_Temp'].groupby(df['YEAR']).mean() 

如何適應這個代碼從九月意味着第一年,到明年五月?

- 編輯:基於下面的評論,你可以假設月份列也是可用的,指定的月份,每行

+0

是JD月? –

+0

什麼是Cnt?什麼是JD? [問] – Alexander

+0

對不起,JD是茱莉安日,即第1天是1月1日,12月31日是365天(或366)。你可以忽略Cnt。 – user308827

回答

1

不知道哪一列指的是一個月,如果缺少它,但是在過去我用一種快速和骯髒的方法來分配自定義季節(如果有人發現更優雅的路線感興趣)。

我已經使用雅虎財經數據來演示方法,除非你的一列是月?

編輯需要數據幀按日期升序排序

import pandas as pd 
import pandas.io.data as web 
import datetime 

start = datetime.datetime(2010, 9, 1) 
end = datetime.datetime(2015, 5, 31) 
df = web.DataReader("F", 'yahoo', start, end) 

#Ensure date sorted --required 
df = df.sort_index() 

#identify custom season and set months june-august to null 
count = 0 
season = 1 
for i,row in df.iterrows(): 
    if i.month in [9,10,11,12,1,2,3,4,5]: 
     if count == 1: 
      season += 1 
     df.set_value(i,'season', season) 
     count = 0 
    else: 
     count = 1 
     df.set_value(i,'season',None) 

#new data frame excluding months june-august 
df_data = df[~df['season'].isnull()] 
df_data['Adj Close'].groupby(df_data.season).mean() 
+0

如果你有'月'欄,你可以用i.month代替行['Month']。 – ryanmc

+0

在這種情況下,您可以非常容易地使用上述內容,只要確保您按日期或年/月進行排序即可。 – ryanmc

相關問題