首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在pandas中如何计算具有反向时间窗口的平均值

在pandas中如何计算具有反向时间窗口的平均值
EN

Stack Overflow用户
提问于 2018-06-07 19:48:12
回答 1查看 190关注 0票数 1

不确定我的问题的标题是否正确,请建议编辑

我有以下数据帧:

df_dict={'startDate': 
['2015-01-01','2015-01-05','2015-01-18','2015-01-25',
'2015-02-02','2015-02-03','2015-02-04','2015-02-17',
'2015-03-03','2015-03-04','2015-03-07','2015-03-11',
'2015-04-04','2015-04-05','2015-04-17','2015-04-19'],
'price':[200,250,270,240,100,120,130,140,300,310,330,370,400,410,420,440],

'250_index': [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]}
df=pd.DataFrame(df_dict)

我需要在我的数据集中找到第一个可用的日期,在本例中是2015-01-01,然后创建30day间隔,例如:2015-01-012015-01-312015-03-022015-04-01,然后对于每个间隔和250_index组合计算过去的30day 60_day90day平均价格。

得到的数据帧应该如下所示,第一个间隔的过去平均值是0,因为我们没有关于发生了什么的信息,但是对于第二个间隔2015-01-31,我们需要根据2015-01-012015-01-31之间的价格计算past_30_avg,其他间隔也是如此:

time_interval    index    past_30_avg  past_60_avg  past_90_avg
 '2015-01-01'     1         0             0            0
                  2         0             0            0
 '2015-01-31'     1         235           0            0
                  2         245           0            0
 '2015-03-02'     1         115          175           0
                  2         130          187           0
 '2015-04-01'     1         315          240          221    
                  2         340          235          238

我正在寻找一种通用的方法,因为它只是我的数据集的一部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 05:20:04

考虑pd.Grouper的30天平均值(每月聚合),然后考虑使用rolling()transform() 60天和90天:

tdf = df.groupby([pd.Grouper(key='startDate', freq='30D', label='right'), '250_index']).mean()\
              .reset_index().rename(columns={'price': 'past_30_avg'})
print(tdf)

tdf['past_60_avg'] = tdf.groupby('250_index')['past_30_avg'].transform(lambda x: x.rolling(2).mean())
tdf['past_90_avg'] = tdf.groupby('250_index')['past_30_avg'].transform(lambda x: x.rolling(3).mean())

#    startDate  250_index  past_30_avg  past_60_avg  past_90_avg
# 0 2015-01-31          1          235          NaN          NaN
# 1 2015-01-31          2          245          NaN          NaN
# 2 2015-03-02          1          115        175.0          NaN
# 3 2015-03-02          2          130        187.5          NaN
# 4 2015-04-01          1          315        215.0   221.666667
# 5 2015-04-01          2          340        235.0   238.333333
# 6 2015-05-01          1          410        362.5   280.000000
# 7 2015-05-01          2          425        382.5   298.333333
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50740435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档