Pandas数据集的年平均值,但不是从1月开始

时间:2015-09-13 03:24:40

标签: python pandas group-by

在下面的数据框中(小片段显示,实际数据帧从2000年到2014年的时间跨度),我想计算年平均值,但是从一年的9月开始,直到明年的5月。

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()

如何将此代码改编为从第一年的9月到明年的5月?

- 编辑:根据以下评论,您可以假设MONTH列也可用,指定每行的月份

1 个答案:

答案 0 :(得分: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()
相关问题