根据熊猫的先前值来更改列值

时间:2019-08-18 16:40:08

标签: python pandas

我有以下数据帧,我正在尝试根据上一个信号更改列值,例如,如果上一个信号为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')

我如何使其成为BUYSELL信号的替代品,而其他一切都作为SKIP

1 个答案:

答案 0 :(得分:1)

这可能应该起作用

s = df.Signal.fillna(method='ffill')
df.loc[s==s.shift(),'Signal'] = 'SKIP'