问题:
概述:
我正在寻找一种矢量化方法来获取看到特定条件的第一个日期。当价格处于dfDays
is >
中指定的目标价格dfWeeks.target
。必须在设定目标的日期之后满足此条件。
有没有办法进行以下时间序列分析apply
或者类似的,在 Pandas 中以矢量化的方式?
Data:
产生freq='D'
测试数据框
np.random.seed(seed=1)
rng = pd.date_range('1/1/2000', '2000-07-31',freq='D')
weeks = np.random.uniform(low=1.03, high=3, size=(len(rng),))
ts2 = pd.Series(weeks
,index=rng)
dfDays = pd.DataFrame({'price':ts2})
现在创建一个重新采样的freq='1W-Mon'
数据框
dfWeeks = dfDays.resample('1W-Mon').first()
dfWeeks['target'] = (dfWeeks['price'] + .5).round(2)
Use reindex
对齐两个 df 上的索引:
dfWeeks = dfWeeks.reindex(dfDays.index)
So dfWeeks
是一个包含我们将使用的目标值的数据框
dfWeeks.dropna().head()
price target
2000-01-03 1.851533 2.35
2000-01-10 1.625595 2.13
2000-01-17 1.855813 2.36
2000-01-24 2.130619 2.63
2000-01-31 2.756487 3.26
如果我们专注于第一个目标dfWeeks
match = dfDays[dfDays.price >= dfWeeks.target.loc['2000-01-03']]
第一场比赛是过去的所以无效所以2000-01-12
条目是第一个有效匹配:
match.head()
price
2000-01-02 2.449039
2000-01-12 2.379882
2000-01-14 2.759891
2000-01-16 2.350821
2000-01-21 2.607467
有没有办法做到这一点apply
或类似的target
条目在dfWeeks
以矢量化的方式?
期望的输出:
price target target_hit
2000-01-03 1.851533 2.35 2000-01-12
2000-01-10 1.625595 2.13 2000-01-12
2000-01-17 1.855813 2.36 2000-01-21
2000-01-24 2.130619 2.63 2000-01-25
2000-01-31 2.756487 3.26 nan