如何处理正负值?

问题描述

在所附的照片中,红色方块突出显示了值从负向正反转(反之亦然)的地方

plus and minus values

例如,当值从正变为负时,我需要下订单(打印“是”), 以及从负到正的变化(例如,打印“否”),

如何用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)))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...