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

使用Pandas Dataframe移除差值绝对值超200的数据及中间数据

问题:移除Pandas DataFrame中的异常区间数据

给定如下Pandas DataFrame:

timestamp  value       value_diff
0           1       100            NaN
1           2       110           10.0
2           3       112            2.0
3           4       130           18.0
4           5      8100         7970.0
5           6      8102            2.0
6           7      7998         -104.0
7           8      5000        -2998.0
8           9       140        -4860.0
9          10       180           40.0
10         11       200           20.0
11         12       205            5.0
12         13       230           25.0
13         14      8200         7970.0
14         15      3000        -5200.0
15         16       235        -2765.0
16         17       247           12.0
17         18       255            8.0
18         19       280           25.0
19         20       302           22.0
20         21       303            1.0
21         22       315           12.0
22         23       330           15.0
23         24       350           20.0
24         25       360           10.0

需求:移除所有value_diff绝对值大于200的数据,同时移除这些异常数据之间的所有条目,最终得到如下结果:

timestamp  value       value_diff
0           1       100            NaN
1           2       110           10.0
2           3       112            2.0
3           4       130           18.0
9          10       180           40.0
10         11       200           20.0
11         12       205            5.0
12         13       230           25.0
16         17       247           12.0
17         18       255            8.0
18         19       280           25.0
19         20       302           22.0
20         21       303            1.0
21         22       315           12.0
22         23       330           15.0
23         24       350           20.0
24         25       360           10.0

解决方案

通过标记异常区间、筛选有效区间的方式实现,具体步骤如下:

代码实现

import pandas as pd

# 加载原始数据(如果已有DataFrame可跳过此步骤)
df = pd.DataFrame({
    'timestamp': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],
    'value': [100,110,112,130,8100,8102,7998,5000,140,180,200,205,230,8200,3000,235,247,255,280,302,303,315,330,350,360],
    'value_diff': [None,10.0,2.0,18.0,7970.0,2.0,-104.0,-2998.0,-4860.0,40.0,20.0,5.0,25.0,7970.0,-5200.0,-2765.0,12.0,8.0,25.0,22.0,1.0,12.0,15.0,20.0,10.0]
})

# 1. 标记单条异常行(value_diff绝对值>200)
is_abnormal = df['value_diff'].abs() > 200

# 2. 按异常行分组,标记整个异常区间
group = is_abnormal.cumsum()
to_drop = df.groupby(group)['value_diff'].transform(lambda x: (x.abs()>200).any())

# 3. 筛选保留正常行
result_df = df[~to_drop]

print(result_df)

代码解释

  • is_abnormal:布尔序列,直接标记value_diff绝对值超标的单条数据。
  • group = is_abnormal.cumsum():对异常行累加分组,每遇到一个异常行就切换分组,让连续的异常区间和正常区间被拆分到不同组。
  • to_drop:判断每个分组是否包含异常行,只要有异常就标记整个组为待删除。
  • df[~to_drop]:筛选出非待删除的行,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:35:37