以下のようなpandasのデータに対して、以下のような処理をしたいと考えています。
<書きたいコード>
signalが2のレコードの同一symbolのtimedelta(10)秒経過前の一番最後のレコードのsignalを1に置き換える。
csv
1 currentpricetime symbol signal 22020-10-23 00:00:01.280687+00:00 7779 2 32020-10-23 00:00:01.394596+00:00 7353 0 42020-10-23 00:00:01.404854+00:00 7779 0 52020-10-23 00:00:01.522376+00:00 1431 0 62020-10-23 00:00:01.532667+00:00 7353 0 72020-10-23 00:00:01.550980+00:00 4436 0 82020-10-23 00:00:01.749720+00:00 7779 0 92020-10-23 00:00:01.760003+00:00 3562 0 102020-10-23 00:00:01.947997+00:00 4393 0 112020-10-23 00:00:01.981073+00:00 2160 2 122020-10-23 00:00:01.991351+00:00 7779 0 132020-10-23 00:00:02.001693+00:00 3562 0 142020-10-23 00:00:02.011933+00:00 9467 0 152020-10-23 00:00:02.022399+00:00 3922 0 162020-10-23 00:00:02.032578+00:00 4436 0 172020-10-23 00:00:09.293038+00:00 4393 0 182020-10-23 00:00:09.299666+00:00 2160 0←ここの0を1に置き換えたい 192020-10-23 00:00:09.299666+00:00 1431 0 202020-10-23 00:00:09.315364+00:00 7779 0←ここの0を1に置き換えたい 212020-10-23 00:00:09.331052+00:00 9467 0 222020-10-23 00:00:09.331052+00:00 3663 0 232020-10-23 00:00:09.415579+00:00 2160 0 242020-10-23 00:00:09.415579+00:00 9467 0 252020-10-23 00:00:09.431199+00:00 4051 0 262020-10-23 00:00:09.493694+00:00 4393 0 272020-10-23 00:00:09.515837+00:00 3922 0 282020-10-23 00:00:15.569884+00:00 3663 0 292020-10-23 00:00:15.580064+00:00 4436 0 302020-10-23 00:00:15.590341+00:00 3359 0 312020-10-23 00:00:15.673560+00:00 4393 0 322020-10-23 00:00:15.681706+00:00 2160 0 332020-10-23 00:00:15.693816+00:00 7353 0 342020-10-23 00:00:15.704075+00:00 7779 0 352020-10-23 00:00:15.714524+00:00 9467 0 362020-10-23 00:00:15.722784+00:00 4051 0 372020-10-23 00:00:15.735338+00:00 3922 0 382020-10-23 00:00:15.745504+00:00 3663 0 392020-10-23 00:00:15.755818+00:00 2484 0 402020-10-23 00:00:15.766206+00:00 4393 0 41以下、続く
<試したこと>
10/28修正
以下のコードを書いてみましたが、later_signalが2の時だけsignalを1に置き換える(それ以外の場合はsignalを書き換えない)applyの部分を書くことができませんでした。
ここの記載方法をご教示いただけないでしょうか?
もし、そもそもの記載方法に誤りがあればご指摘もお願いします。
python
1 # 指定秒後のシグナルを置き換え 2for symbol, df_s in df.groupby('symbol'): 3 df_s = df_s.sort_values(['currentpricetime']) 4 later_signal=df_s.set_index('currentpricetime')['signal'].asof(df_s['currentpricetime'] - pd.Timedelta(timedelta)).array 5 df.loc[df_s.index, 'later_signal'] = later_signal 6 df['signal'] = df['later_signal'].apply((lambda x: 1 if x == 2 else None))
回答1件
あなたの回答
tips
プレビュー