首页 > 解决方案 > 在 Pandas 的数据框中迭代两个连续行的 Pythonic 方法是什么?

问题描述

我想迭代一个数据帧记录,如下伪代码:

for index, row in records.iterrows():
    process(row[index-1]['Expected Time'], row[index]['Actual Time'])

whereprocess是一个具有比较当前记录的“实际时间”和上一行的“预期时间”逻辑的函数。

上面的代码不起作用,因为作为元组的行不允许通过带空格的字符串进行访问。相反,我必须将列/字段的索引用于名称包含空格的那些。这是一种硬代码,不是很容易维护。

我想知道是否有更好的解决方案?

或者,是否可以迭代一对数据帧,如以下伪代码:

current_df = records[1:]
previous_df = records[:-1]

for current_record, previous_record in (current_df, previous_df):
    process(previous_record['Expected Time'], current_record['Actual Time'])

使用相同的数据框,一个删除第一个,另一个删除最后一行。它在同一索引处比较当前行和它的前一行。

如何在 Python 中实现上述目标?

标签: pythonpandas

解决方案


这应该可以解决问题:

records["prev"]=records["Expected Time"].shift(1)
records[["prev", "Actual Time"]].apply(lambda X: process(X["prev"], X["Actual Time"]), axis=1)

推荐阅读