Can';在使用布尔索引(Pandas)时,不能将值正确分配给新列
我有一列日期框Can';在使用布尔索引(Pandas)时,不能将值正确分配给新列,pandas,boolean,Pandas,Boolean,我有一列日期框df的Close\u open: Date 2010-02-11 0.00 2010-02-12 0.23 2010-03-19 0.02 2010-04-12 0.05 2010-04-13 0.15 2010-05-07 0.09 2010-05-12 0.03 2010-05-26 0.02 2010-06-18 -0.03 2010-06-22 -0.03 我正在尝试创建一个新列,Changed,当Close\u o
df
的Close\u open
:
Date
2010-02-11 0.00
2010-02-12 0.23
2010-03-19 0.02
2010-04-12 0.05
2010-04-13 0.15
2010-05-07 0.09
2010-05-12 0.03
2010-05-26 0.02
2010-06-18 -0.03
2010-06-22 -0.03
我正在尝试创建一个新列,Changed
,当Close\u open
列中的符号发生变化(从正变为负,反之亦然)时,该列的值为true
我尝试了下面的代码,但我得到了所有的错误,而我应该得到至少一个正确的
for i in range(1,10):
df['Changed'] =abs((df['close_open'][i]) +(df['close_open'][i-1])) < abs(df['close_open'][i])
但是,当我运行此代码时(相同的代码,只是没有分配给df列)
我建议这样做:
df['changed'] = df['close_open'] * df['close_open'].shift() < 0
close_open changed
2010-02-11 0.00 False
2010-02-12 0.23 False
2010-03-19 0.02 False
2010-04-12 0.05 False
2010-04-13 0.15 False
2010-05-07 0.09 False
2010-05-12 0.03 False
2010-05-26 0.02 False
2010-06-18 -0.03 True
2010-06-22 -0.03 False
df['changed']=df['close\u open']*df['close\u open'].shift()<0
关闭/打开已更改
2010-02-11 0.00假
2010-02-12 0.23假
2010-03-19 0.02假
2010-04-12 0.05假
2010-04-13 0.15假
2010-05-07 0.09假
2010-05-12 0.03假
2010-05-26 0.02假
2010-06-18-0.03真实
2010-06-22-0.03假
谢谢。这同样有效。为了便于学习,是否有任何方法可以让这个布尔过滤器在没有我尝试使用的for循环的情况下工作abs((df['close\u open'][i])+(df['close\u open'][i-1]))
?谢谢。您只需在左侧添加[i]
:df['Changed'][i]
。发生的情况是,每次都会重新写入整个列,因此您只能看到所有行中i=9的结果(如果您设置了范围(1,9),则所有行中的结果都是正确的)。注意:这不是一个推荐的方法,但在这里它会起作用,而且只是为了学习。啊,我明白了。非常感谢。
for i in range(1,10):
abs((df['close_open'][i]) +(df['close_open'][i-1])) < abs(df['close_open'][i])
False
False
False
False
False
False
False
True
False
df['changed'] = df['close_open'] * df['close_open'].shift() < 0
close_open changed
2010-02-11 0.00 False
2010-02-12 0.23 False
2010-03-19 0.02 False
2010-04-12 0.05 False
2010-04-13 0.15 False
2010-05-07 0.09 False
2010-05-12 0.03 False
2010-05-26 0.02 False
2010-06-18 -0.03 True
2010-06-22 -0.03 False