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

如何高效过滤pandas DataFrame,基于多列条件识别价格递增异常记录

高效识别pandas中价格序列异常记录的实现方案

核心逻辑全部使用pandas原生向量化操作,底层由C实现,无Python层循环开销,适合千万级及以上体量的DataFrame使用。

实现步骤

  1. 预处理排序:先按id和zone升序排列,确保每个id下的记录严格按照zone 1到zone 5的顺序排列,避免zone乱序导致判断错误
import pandas as pd

# 此处df为你原始的DataFrame
df = df.sort_values(by=['id', 'zone'], ignore_index=True)

# 可选前置校验:过滤掉记录数不足5的异常id,按需开启
# df = df[df.groupby('id')['id'].transform('count') == 5]
  1. 标记异常记录:通过分组差分和位移标记相邻逆序的记录,完全匹配"相邻逆序则两条均为异常"的规则
# 标记当前行和前一行价格逆序的位置
df['curr_reverse'] = df.groupby('id')['price'].diff() <= 0
# 标记前一行和当前行逆序的位置(即当前逆序的前一条也要算异常)
df['prev_reverse'] = df.groupby('id')['curr_reverse'].shift(-1, fill_value=False)
# 合并异常标记
df['is_abnormal'] = df['curr_reverse'] | df['prev_reverse']
  1. 导出异常记录
# 筛选异常记录,删除中间辅助列
abnormal_records = df[df['is_abnormal']].drop(columns=['curr_reverse', 'prev_reverse', 'is_abnormal'])
# 导出到csv文件
abnormal_records.to_csv('abnormal_price_records.csv', index=False, encoding='utf-8-sig')

逻辑验证

你提供的示例数据经过上述逻辑处理后,第二行的差分为24-33=-9 <=0,因此curr_reverse在第二行标记为True,prev_reverse在第一行标记为True,最终前两行的is_abnormal均为True,和要求的异常判定结果完全一致。


内容的提问来源于stack exchange,提问作者Sithija Piyuman Thewa Hettige

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:03