关于python:重新定义要分组的年份

Redefining a year to group in pandas

我有一些价格数据作为时间序列。我正在尝试按年份和月份对价格进行分组和平均。这是要抓的东西,例如,我想离开Jul-Jun一年。 2015年将是2015年7月-2016年6月(定义为作物年度),因此"作物月份"也需要将7月-6月设置为1-12。反正有没有实现这一点的大pandas。我的代码中的逻辑似乎有缺陷,并且没有给我想要的结果。我尝试对某些if语句使用循环,但是我的逻辑在某处迷路了。我已经在下面发布了结果数据框。如您所见,作物年度数据是错误的。任何有关如何处理代码的帮助都将非常有用。

′′′

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pxdata = ek.get_timeseries(['Wc1','BL2c1', 'W13.5-FOBRU=AGRP'], fields='CLOSE', start_date='2009-01-01')

pxdata.loc[:,'Crop Month'] = 0
pxdata.loc[:,'Crop Year'] = 0
pxdata.iloc[0,-1] = 2015
pxdata.iloc[0,-2] = 8
for i in range(1, len(pxdata)):
    if pxdata.index[i].month==7:
        pxdata.iloc[i,-2]=1
    elif pxdata.index[i].month>pxdata.index[i-1].month:
        pxdata.iloc[i,-2]=pxdata.iloc[i-1,-2]+1
    else:
        pxdata.iloc[i,-2]=pxdata.iloc[i-1,-2]
    if pxdata.iloc[i-1,-2]==12 and pxdata.iloc[i,-2]==1 :
        pxdata.iloc[i,-1]=pxdata.iloc[i-1,-1]+1
    else:
        pxdata.iloc[i,-1]=pxdata.iloc[i-1,-1]

′′′

谢谢,伙计们

enter


将日期设置为索引,以便可以使用dataframe.loc['2015-07-01':'2016-06-01']选择数据。

pandas.DataFrame.loc

然后为您要选择的时间序列创建一个日期范围。

start = pd.date_range('2015-06-01', periods=4, freq='12M')
end = pd.date_range('2016-07-01', periods=4, freq='12M')
for start, end in list(zip(start,end)):
print(start, end)

pandas.date_range

现在您可以按loc[start:end]选择周期。

如果要选择平均值,可以使用dataframe.mean()

pandas.DataFrame.mean

祝你好运。