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] |
′′′
谢谢,伙计们
将日期设置为索引,以便可以使用
pandas.DataFrame.loc
然后为您要选择的时间序列创建一个日期范围。
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
现在您可以按
如果要选择平均值,可以使用
pandas.DataFrame.mean
祝你好运。