我有以下数据帧,我正在尝试根据上一个信号更改列值,例如,如果上一个信号为BUY
,则下一个值应为SELL
,否则应为SKIP
也使用SELL
信号。
将其想象为股票价格,因此在BUY
之后,信号必须为SELL
,这就是我要执行的操作。
import pandas as pd
import numpy as np
data = {'Price':[3.4, 3.5, 3.2, 3.3, 3.2, 3.7, 4, 3.1, 3.4, 3.1],
'Signal':['BUY', 'SELL', np.nan, 'BUY', 'BUY', 'SELL', np.nan, 'SELL', 'SELL', 'BUY']
}
df = pd.DataFrame(data)
df
输出
0 3.4 BUY
1 3.5 SELL
2 3.2 NaN
3 3.3 BUY
4 3.2 BUY
5 3.7 SELL
6 4.0 NaN
7 3.1 SELL
8 3.4 SELL
9 3.1 BUY
我期望输出如下所示。
0 3.4 BUY
1 3.5 SELL
2 3.2 SKIP
3 3.3 BUY
4 3.2 SKIP
5 3.7 SELL
6 4.0 SKIP
7 3.1 SKIP
8 3.4 SKIP
9 3.1 BUY
我尝试了以下代码,但未按预期工作。
df.Signal = df.Signal.mask(df.Signal.shift(1) == df.Signal, 'SKIP')
我如何使其成为BUY
和SELL
信号的替代品,而其他一切都作为SKIP
?
答案 0 :(得分:1)
这可能应该起作用
s = df.Signal.fillna(method='ffill')
df.loc[s==s.shift(),'Signal'] = 'SKIP'