Pandas Dataframe Column的条件逻辑

时间:2017-11-22 04:10:12

标签: python pandas dataframe indexing

我对Python很新,所以请原谅这个可能微不足道的问题。

考虑到我为特定期货合约计算的RSI值的变化,我试图生成买入和卖出信号。在我的DataFrame中,我创建了一个名为R S I的列,其中包含我引用的值,我想要做的是根据预定的逻辑检查每个进程值,如果是符合标准,生成"购买"或者"销售"然后增加每个生成的信号的计数。即我想象一个使用[i]循环比较[i+1]for的解决方案,但是我得到的错误是 -

TypeError: cannot do label indexing on class'pandas.indexes.range.RangeIndex with these indexers [25.714285714285722] of class 'numpy.float64'

这是我的代码

for i in es.RSI:
    Buy = 0
    Sell = 0
    if es.RSI[i] < 30.0 and es.RSI[i+1] >30.0:
        es.RSI[i] = "Buy"
        Buy = Buy +1

    if es.RSI[i] >70.0 and es.RSI[i+1] < 70.0 :
        es.RSI[i] = "Sell"
        Sell = Sell +1

2 个答案:

答案 0 :(得分:0)

根据错误,看起来你正在使用float作为数组索引值。也许尝试替换

的每个索引
es.RSI[i]

es.RSI[int(i)]

(与es.RSI [i + 1]相同,将其替​​换为es.RSI [int(i)+1]。)

答案 1 :(得分:0)

你的循环

for i in es.RSI:

迭代来自er.RSI数组的项目,因此您的i包含RSI的值,而不是数组的索引。这就是你看到这个错误的原因

TypeError: cannot do label indexing on class'pandas.indexes.range.RangeIndex with these indexers [25.714285714285722] of class 'numpy.float64'

要迭代数组索引,您应该使用

for i in range(len(es.RSI)-1):