将数据帧的最后一行与它上面的一行和它上面的另一行进行比较

问题描述 投票:0回答:2

我有一个数据框,在同一列上存在许多行数据。 我需要将最后一行(最新行)与它上面的行(倒数第二行)进行比较,然后再次比较它上面的行(倒数第三行)

代码如下:

dataframe.loc[
        (
            # Scontents : data value is above 70
            (qtpylib.crossed_above(dataframe['avg'], self.sell_avg.value)) &
            (dataframe['tema'] > dataframe['bb_middleband']) &  # Guard: tema above BB middle
            #Compare here :
            (dataframe['tema'] < dataframe['tema'].shift(1))
        ),
        'execute02'] = 1
return dataframe

这块可以比较最后一行和它上面的行。

我试过了:

(dataframe['tema'] < dataframe['tema'].shift(1) < dataframe['tema'].shift(1))

但它在 shell 中给了我值错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我对熊猫很菜鸟...我应该怎么做才能比较 3 个实例?我尝试阅读 panda 文档,但它只讲述索引 =1,但我不知道如何告诉它从最后一行读取 3 行。

谢谢你。

克里斯

python pandas dataframe shift pandas-loc
2个回答
0
投票

您可以使用

iloc
来实现此目的,负值索引从最后一行开始计数。

例如

iloc[-1]
给出最后一列,
-2
给出其上方的列,依此类推。

所以代码变成:

((dataframe['tema'].iloc[-1] < dataframe['tema'].iloc[-2]) &
(dataframe['tema'].iloc[-1] < dataframe['tema'].iloc[-3]))

0
投票

小错别字 例如 iloc[-1] 给出最后一个“行”,-2 给出它上面的“行”,依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.