基于条件语句的 Python 数据帧新列



我有一个数据帧,由几列交易策略的自定义计算组成。 我想向这个数据帧添加一个名为"信号"的新列,由 0 和 1 组成(仅多头策略)。 信号将在以下代码上生成,此代码中的每个项目都是数据帧中的单独列:

if:
    open_price > low_sigma.shift(1) and high_price > high_sigma.shift(1):
        signal = 1
    else:
        signal = 0

根据我的理解,if 语句对数据帧无效。 此外,我无法按预期输出它。 您建议我如何生成信号并将其添加到数据帧?

您可以将

df['Signals']分配给布尔条件本身,然后使用 astype 将布尔值转换为 0 和 1:

df['Signals'] = (((df['open_price'] > df['low_sigma'].shift(1)) 
    & (df['high_price'] > df['high_sigma'].shift(1)))
    .astype('int'))

例如

import pandas as pd
df = pd.DataFrame({
    'open_price': [1,2,3,4],
    'low_sigma': [1,3,2,4],
    'high_price': [10,20,30,40],
    'high_sigma': [10,40,20,30]})
#    high_price  high_sigma  low_sigma  open_price
# 0          10          10          1           1
# 1          20          40          3           2
# 2          30          20          2           3
# 3          40          30          4           4
mask = ((df['open_price'] > df['low_sigma'].shift(1)) 
        & (df['high_price'] > df['high_sigma'].shift(1)))
# 0    False
# 1     True
# 2    False
# 3     True
# dtype: bool
df['Signals'] = mask.astype('int')
print(df)

收益 率

   high_price  high_sigma  low_sigma  open_price  Signals
0          10          10          1           1        0
1          20          40          3           2        1
2          30          20          2           3        0
3          40          30          4           4        1

最新更新