意外的SettingWithCopyWarning

时间:2016-07-04 08:33:07

标签: python pandas

我使用.loc[: (foo, bar)]构建避免了大多数SettingWithCopy警告。

但我不知道如何正确构建一个案例:

for sec in security_list:
     stochs.loc[:, (sec,'entry_signal')][stochs[sec, 'raw_signal'].shift(1) == stochs[sec, 'raw_signal']] = 0  

我尝试做的事情:在stochs数据框中添加一个新列entry_signalentry_signal是1,0或-1。如果raw_signal与之前的raw_signal保持不变,则为0,否则为raw_signal(1或-1)的值。

我猜大熊猫不喜欢第二个索引片段[stochs[sec, 'raw_signal'].shift(1) == stochs[sec, 'raw_signal']],因为它产生了一个副本。

有人可以建议如何正确地重写这个陈述吗?

由于

1 个答案:

答案 0 :(得分:2)

更改为:

stochs.loc[stochs[sec, 'raw_signal'].shift(1) == stochs[sec, 'raw_signal'], (sec,'entry_signal')] = 0 

你做的是chained indexing,因为你是双重下标所以你应该把条件放在括号内loc