问题描述
在所附的照片中,红色方块突出显示了值从负向正反转(反之亦然)的地方
例如,当值从正变为负时,我需要下订单(打印“是”), 以及从负到正的变化(例如,打印“否”),
如何用python编写代码?
example list = [ 1,2,6,-3,-2,-5,7,1,-1,-3]
前三个值(1、2、6)是正值,但是当它变为负数时,我想print('sell')
对于-3,-2,-5,有负值,当它变为正数时,我想print('buy')
否则(当值保持相同的负号或相同的加号时)print('ok')
#output:
ok ok ok sell ok ok buy ok ok sell ok
解决方法
这是解决您的问题/示例的简单代码:
l = [ 1,2,6,-3,-2,-5,7,1,-1,-3]
for i in range(0,len(l)-1):
p = l[i] * l[i+1]
if p > 0:
print('ok')
elif l[i+1] < 0:
print('sell')
else:
print('buy')
如果您想在数据框中添加新列,请参考以下示例:
d = {'col1': range(11),'col2': [ 1,-3]}
df = pd.DataFrame(data=d)
df['shift_col'] = df.col2.shift(-1)
df
col1 col2 shift_col
0 0 1 2.0
1 1 2 6.0
2 2 6 -3.0
3 3 -3 -2.0
4 4 -2 -5.0
5 5 -5 6.0
6 6 6 7.0
7 7 7 1.0
8 8 1 -1.0
9 9 -1 -3.0
10 10 -3 NaN
这是上一个示例中我们的简单功能:
def compare(line):
p = line.col2 * line.shift_col
if p > 0:
return 'ok'
elif line.shift_col < 0:
return 'sell'
else:
return 'buy'
df['order'] = df.apply(compare,axis=1)
最后,这将是结果:
col1 col2 shift_col order
0 0 1 2.0 ok
1 1 2 6.0 ok
2 2 6 -3.0 sell
3 3 -3 -2.0 ok
4 4 -2 -5.0 ok
5 5 -5 6.0 buy
6 6 6 7.0 ok
7 7 7 1.0 ok
8 8 1 -1.0 sell
9 9 -1 -3.0 ok
10 10 -3 NaN buy
,
在您的情况下,它是您想要的简单布尔值(真/假),并且很容易通过将其转换为numpy数组从列表中获取。
import numpy as np
my_list = [ 1,-3]
my_array = np.array(my_list) # convert list to numpy array
print(my_array >= 0)
如果您想将结果映射到特定的文本,可以这样映射它:
def mapping(n):
if n:
return "ok"
else:
return "sell"
print(list(map(mapping,my_array >= 0)))