如何将pandas数据帧中的行与移动窗口进行比较



我想用一个移动的窗口来比较它们之间的一组值。我试图用一种更好的方式解释:我在pandas数据帧上有一列,我想测试一个序列中的5行是否相同,但我想在移动窗口中进行检查,也就是说,我想比较从0到5的行,然后比较从1到6的行,依此类推,以便进行某些更改。我想知道如何用比我更好的方式来做这件事,因为我使用了iterrows方法。

我的方法:


for idx, row in df[2:-2].iterrows():
previous2 = df.loc[idx-2, 'speed_limit']
previous1 = df.loc[idx-1, 'speed_limit']
now = row['speed_limit']
next1 = df.loc[idx+1, 'speed_limit']
next2 = df.loc[idx+2, 'speed_limit']
if (next1==next2) & (previous1 == previous2) & (previous1 == next1) & (now!=previous1):
df.at[idx, 'speed_limit'] = previous1

谢谢你的耐心。如果有任何建议,我将不胜感激。我祝你今天过得愉快。

我想发布基于numpy select和pandas shift的解决方案,这比以前更快。

def noise_remove(df, speed_limit_column):

speed_data_column = df[speed_limit_column]
previous_1 = speed_data_column.shift(-1)
previous_2 = speed_data_column.shift(-2)
next_1 = speed_data_column.shift(+1)
next_2 = speed_data_column.shift(+2)
conditions = [(previous_1 == previous_2) &
(next_1 == next_2) &
(previous_1 == next_1) &
(speed_data_column == previous_1),
(previous_1 == previous_2) &
(next_1 == next_2) &
(previous_1 == next_1) &
(speed_data_column != previous_1)]
choices = [speed_data_column, previous_1]
df[speed_limit_column] = np.select(conditions, choices, default=speed_data_column)
return df

如果你有什么建议,我将不胜感激。祝你今天过得愉快!

相关内容

  • 没有找到相关文章

最新更新