You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame迭代处理:删除freq值小于前一行的异常数据行

实现方案

你可以直接用Pandas的向量化操作实现需求,不需要手动遍历全表,代码简洁且执行效率更高,完全可以满足你3700行数据的处理需求。

核心逻辑

利用shift()函数获取上一行的频率值,和当前行的频率做比较,只保留当前行频率大于等于上一行频率的行,第一行无上一行数据默认保留。

完整代码示例

import pandas as pd
import numpy as np

# 假设你的已按time_tag排序的DataFrame变量名为df
# 生成筛选掩码:当前行freq >= 上一行freq,第一行自动满足条件
mask = df['freq'] >= df['freq'].shift(1).fillna(-np.inf)

# 可选:规避浮点数精度误差,替换为以下掩码,1e-9可根据你的频率精度调整
# mask = (df['freq'] - df['freq'].shift(1).fillna(-np.inf)) >= -1e-9

# 得到筛选后的结果
df_filtered = df[mask].copy()

示例处理效果

针对你给出的示例数据,处理后会保留以下3行:

freq         snr    time_tag
128   395.400902  115.737681  652492975
134   395.415043  115.858103  652492978
137   395.427460  115.805077  652492979

频率回退的第2行(索引118)、第5行(索引133)都会被删除,符合你的需求。

可选遍历实现(不推荐)

如果你坚持要通过遍历实现,也可以用以下代码:

keep_idx = []
last_freq = -np.inf
for idx, row in df.iterrows():
    if row['freq'] >= last_freq:
        keep_idx.append(idx)
        last_freq = row['freq']
df_filtered = df.loc[keep_idx].copy()

内容的提问来源于stack exchange,提问作者Omer Davidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:30:04