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

Pandas DataFrame列值较上一行变化≥50%时替换为NaN实现问题

实现方案

核心逻辑是遍历指定列时,始终用当前值和上一个未被标记为离群值的有效值计算涨跌幅度,符合阈值条件则标记为NaN,否则更新有效值为当前值。

完整实现代码

import pandas as pd
import numpy as np

# 构造示例数据
x = [16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
y = [6,6,3,3,8,8,7,2,2,2]
data = pd.DataFrame({'x': x, 'y': y})

# 离群值替换函数
# 参数说明:
# df: 待处理DataFrame
# col: 要处理的目标列名
# threshold: 涨跌幅度阈值,默认0.5对应50%
def replace_outlier_by_pct(df, col, threshold=0.5):
    # 取第一行作为初始有效值
    last_valid = df[col].iloc[0]
    result = [last_valid]
    # 从第二行开始遍历计算
    for current_val in df[col].iloc[1:]:
        change_pct = abs(current_val - last_valid) / last_valid
        if change_pct >= threshold:
            result.append(np.nan)
        else:
            result.append(current_val)
            last_valid = current_val
    df[col] = result
    return df

# 调用函数处理y列
data = replace_outlier_by_pct(data, 'y')
print(data)

输出结果验证

运行代码后输出的DataFrame和预期完全一致:

xy
166.0
176.0
18NaN
19NaN
208.0
218.0
227.0
23NaN
24NaN
25NaN

多列处理拓展

如果需要对多列执行相同规则的离群值替换,只需循环调用函数即可:

# 示例:同时处理y、z两列
for target_col in ['y', 'z']:
    data = replace_outlier_by_pct(data, target_col)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:05