python - 对于 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()
解决方案
我相信这可以解决您的问题:
df.rolling(4).apply(lambda rows: rows[0] + rows[1] < rows[2] + rows[3])
前 3 行将是NaN
s 但您没有定义您希望在那里发生的事情。
至于第二部分,为了能够为新数据实时生成此条件,您只需预先添加当前数据的最后 3 行,然后对其应用相同的过程:
pd.concat([df[-3:], df])
推荐阅读
- c# - 使用 IComparable 和 IComparer 的多重排序规则?
- c# - Tibco ems 多个消费者
- android - asynctask 函数无法识别结果值
- javascript - Firebase 身份验证,firebase 未定义
- actions-on-google - 如何让用户权利在对话中持续存在
- php - 在 MySQL Query 中返回所有 wows、mached 和 unmatched
- rxjs - 如果在throttleTime 超时期间触发事件,则在超时完成后重播最后一个事件并再次开始超时
- python - 复制python文件中的最后一行并在添加新行之前对其进行修改
- ios - 为什么 AWSCognitoCredentialsProvider.getIdentityId().continueWith(block:) 不运行它的块?
- react-native - 当状态/道具改变时,反应原生动画部分列表跳到顶部