質問:ベクトル化の道
概要:
私は特定の条件が見られている最初の日付を取得するためのベクトル化方法を探しています。条件は、dfDays
の価格が>
の場合、dfWeeks.target
で指定された目標価格です。この条件は、ターゲットが設定された日以降にヒットする必要があります。
apply
またはそれに類する類似の時系列解析を、パンダでベクター化された方法で実行する方法はありますか?
データ:
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})
今すぐ両方のDにインデックスを整列するために使用reindex
リサンプリングfreq='1W-Mon'
データフレーム
dfWeeks = dfDays.resample('1W-Mon').first()
dfWeeks['target'] = (dfWeeks['price'] + .5).round(2)
を作成して生成しますF:
dfWeeks = dfWeeks.reindex(dfDays.index)
のでdfWeeks
は、我々はdfWeeks
match = dfDays[dfDays.price >= dfWeeks.target.loc['2000-01-03']]
から最初の目標に焦点を当てた場合は最初のマッチがである
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
を使用する目標値を含むデータフレームであります過去があまり有効でないため、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
やベクトル化の方法でdfWeeks
でtarget
エントリに対して同様のでこれを行う方法はありますか?
所望の出力:
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
私は論理を理解していません - どのようにして目的のデータセットの 'target'と' target_hit'カラムを得ましたか? – MaxU
[XY問題]のように見えます。 stackexchange.com/a/66378/348814)、その特定のソリューションに集中しているときは、より良いものがあるかもしれません。だからこそ私はあなたが達成したいことを理解しようとしています – MaxU
@マックス、私は達成しようとしていることの概要を投稿を更新しました。 – ade1e