首页 > 解决方案 > 对于 Python Pandas,如何针对前 2 行实现 2 行的“运行”检查?

问题描述

[更新预期结果]

我正在尝试实施“运行”检查,我需要两行的总和和平均值大于前两行。

参考下面的数据框(复制到电子表格中),我正在尝试编写一个函数,如果这两个橙色单元格的平均值大于蓝色单元格,则该函数将为第 8 行返回 true,位于名为 ' 的新列下条件 11'。这里的数据框是历史数据,因此所有行都可用。

请注意,电子表格中添加了行列,我更容易在此处引用行。

在此处输入图像描述

我一直在使用 .rolling 来引用当前行 + 要引用的任何行数,或者使用 shift(1) 来引用上一行。

df.loc[:, ('Cond9')] = df.n.rolling(4).mean() >= 30
df.loc[:, ('Cond10')] = df.a > df.a.shift(1)

我被困在这里......我如何做到这 2 行与前 2 行?请指教!

这个问题的第二部分:我有另一个函数可以检查数据框中的最新行是否与上述相同。当新数据流入数据帧并且该函数应该只检查最新的行时,此函数旨在实时使用。

我可以检查以下代码是否可以检测上述相同的条件吗?

cond11 = candles.n[-2:-1].sum() > candles.n[-4:-3].sum()

标签: pythonpandasdataframe

解决方案


我相信这可以解决您的问题:

df.rolling(4).apply(lambda rows: rows[0] + rows[1] < rows[2] + rows[3])

前 3 行将是NaNs 但您没有定义您希望在那里发生的事情。

至于第二部分,为了能够为新数据实时生成此条件,您只需预先添加当前数据的最后 3 行,然后对其应用相同的过程:

pd.concat([df[-3:], df])

推荐阅读