遍历熊猫数据框并应用if esle函数

时间:2020-06-25 09:56:01

标签: python pandas quantitative-finance

我正在尝试使用python构建一个简单的回测器,该回测器通过在一定时间内比较2个值来工作,例如(在时间x检查indicator_value> ohlc_value:order_type = 1;否则订单类型将为0) / p>

data = {'time':[0, 1, 2, 3, 4, 5], 'ohlc':[1.1, 1.2, 1.3, 1.4, 1.5,1.66], 'indicator':[1.05, 1.22, 1.4, 1.55, 1.6,1.77]}
df = pd.DataFrame(data)

如何设置这些值?

if data['ohlc'] > data['indicator']:
      data['order_type'] = 1
else:
      data['order_type'] = 0

我知道我不能像这样循环数据帧。

2 个答案:

答案 0 :(得分:1)

您在这里:

df['order_type'] = (df['ohlc'] > df['indicator']).astype(int)
print(df)

输出:

   time  ohlc  indicator  order_type
0     0  1.10       1.05           1
1     1  1.20       1.22           0
2     2  1.30       1.40           0
3     3  1.40       1.55           0
4     4  1.50       1.60           0
5     5  1.66       1.77           0

如果您要根据不同的条件分配自定义值,则可以采用以下一种方法(默认值为0

import numpy as np
conditions = [df['ohlc'] > df['indicator']]
choices = [-1]
df['order_type'] = np.select(conditions, choices)
print(df)

输出:

   time  ohlc  indicator  order_type
0     0  1.10       1.05          -1
1     1  1.20       1.22           0
2     2  1.30       1.40           0
3     3  1.40       1.55           0
4     4  1.50       1.60           0
5     5  1.66       1.77           0

答案 1 :(得分:0)

您也可以尝试

def fun(row):
    return 1 if row['ohlc']>row['indicator'] else 0 

df['order_type']=df.apply(fun,axis=1)
df