我有很长的时间序列的每周数据。对于一个给定的观察,我想计算一周的值与前三年同一个月的平均值的对比
具体示例:对于2019-02-15数据点,我想将其与所有2018年2月、2017年2月和2016年2月数据点的平均值进行比较
我想用这种方式填充整个时间序列(头三年当然是np.nans
)
我做了一个非常粗略的单数据点计算的例子,我想做,但我不知道如何实现在一个矢量化的解决方案这一点。我也没有印象,我不得不使用这个中间助手表“mthèu avg”
import pandas as pd
ix = pd.date_range(freq='W-FRI',start="20100101", end='20190301' )
df = pd.DataFrame({"foo": [x for x in range(len(ix))]}, index=ix) #weekly data
mth_avg = df.resample("M").mean() #data as a monthly average over time
mth_avg['month_hack'] = mth_avg.index.month
#average of previous three years' same-month averages
df['avg_prev_3_year_same-month'] = "?"
#single arbitrary example of my intention
df.loc['2019-02-15', "avg_prev_3_year_same-month"]= (
mth_avg[mth_avg.month_hack==2]
.loc[:'2019-02-15']
.iloc[-3:]
.loc[:,'foo']
.mean()
)
df[-5:]
我认为这实际上是一个不寻常的问题-我知道没有任何现有的功能。制作助手表可以节省计算时间,实际上我使用了两个。我的解决方案使用循环(即列表理解)和时间感知来避免
month_hack
。否则我认为这是一个好的开始。很高兴看到更优雅的东西相关问题 更多 >
编程相关推荐