[英]Redefining a year to group in pandas
我有一些價格數據作為時間序列。 我正在嘗試按年和月對價格進行分組和平均。 這里有一個問題,我想從 7 月到 6 月有一年,例如 2015 年是 2015 年 7 月 - 2016 年 6 月(定義為作物年),因此 7 月至 6 月的“作物月”也需要為 1-12。 無論如何要實現這是熊貓。 我的代碼中的邏輯似乎有缺陷,並沒有給我想要的結果。 我嘗試使用帶有一些 if 語句的循環,但我的邏輯在某處丟失了。 我在下面發布了結果數據框。 如您所見,作物年度數據是錯誤的。 任何有關如何處理代碼的幫助都會很棒。
'''
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]
'''
提前謝謝各位
將您的日期設置為索引,因此您可以使用dataframe.loc['2015-07-01':'2016-06-01']
來選擇您的數據。
然后為您要選擇的時間序列創建一個日期范圍。
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)
現在您可以通過loc[start:end]
選擇時間段。
如果要選擇平均值,可以使用dataframe.mean()
。
祝你好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.