检测数组中的符号变化[关闭]
Posted
技术标签:
【中文标题】检测数组中的符号变化[关闭]【英文标题】:Detect sign changes in an array [closed] 【发布时间】:2020-12-09 23:02:12 【问题描述】:当数值从正变为负时,我需要下订单,例如(打印“sell”), 例如,当它们从负数变为正数时(打印“购买”)。对于没有符号变化的索引,我想打印“ok”。
我应该如何用 python 编写代码?
输入示例
list = [ 1, 2, 6, -3, -2, -5, 6, 7, 1, -1, -3]
前三个值(1、2、6)是正值,但是当它变成负值时,我想print('sell')
而对于-3、-2、-5,都有负数,当变成正数时,我要print('buy')
否则,(当值保持相同符号时)print('ok')
示例输出
ok ok ok sell ok ok buy ok ok sell ok
【问题讨论】:
我们希望您的问题是独立的。将示例作为问题的一部分发布。不接受站外链接;不接受文字图片。 @Prune 您的评论中有多余的空间。你熟悉Is it always a good idea to demand the OP “post some code”?吗?最小的可重复示例对调试问题有用,而不是操作问题。 【参考方案1】:这是一个解决您的问题/示例的简单代码:
l = [ 1, 2, 6, -3, -2, -5, 6, 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, 2, 6, -3, -2, -5, 6, 7, 1, -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
【讨论】:
我想这就是我想要的,我会检查并查看输出,谢谢 谢谢,你的代码非常适合列表,你能帮我做和熊猫一样的事情吗,ibb.co/bmvgtWq 请检查这张图片,我想创建一个名为“order”的新列,来自 raw.MACDline 我在上面编辑了我的回复 非常感谢'habibi',你真是太棒了,我刚刚添加了这一行——df['shift_plus'] = df.order.shift(1)——完全正确。 我可以在第二天问你有什么问题吗?我刚开始 1 个月前,我是初学者。【参考方案2】:在您的情况下,它是您想要的简单布尔值 (True/False),通过将列表转换为 numpy 数组很容易从列表中获取。
import numpy as np
my_list = [ 1, 2, 6, -3, -2, -5, 6, 7, 1, -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)))
【讨论】:
以上是关于检测数组中的符号变化[关闭]的主要内容,如果未能解决你的问题,请参考以下文章