Python Dataframe基于条件语句的新列

时间:2015-01-08 02:38:20

标签: python pandas signals conditional-statements

我有一个数据框,包含几列交易策略的自定义计算。我想添加一个名为' Signals'到这个数据帧,由0和1组成(仅限长策略)。信号将在以下代码中生成,此代码中的每个项目都是数据框中的单独列:

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

根据我的理解,如果语句对数据帧无效。另外,我还没有按照要求输出。您如何建议我生成信号并将其添加到数据帧?

1 个答案:

答案 0 :(得分:0)

您可以将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