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

如何在pandas中获取使用drop方法删除的99分位数以上的数值

Pandas提取高于99分位数的被删除数值方法

你原有代码存在两处需要修正的问题:

  • 变量名冲突:你预先定义了features为目标列列表,但循环变量也用了features,会覆盖原有列表,且循环会遍历整个df的所有列,不会限制在你指定的两列范围内
  • 分位数计算偏差:如果提前逐列删行,后续列计算99分位数是基于已经裁剪过的数据集,不是原始数据集的分位数,结果会和预期不符

你可以按照先计算分位数、再标记异常值、最后拆分数据的逻辑实现需求,参考代码如下:

import pandas as pd

# 指定需要处理的目标列
features = ['HYG_FT01', 'HYG_PU12_PW_PV']

# 第一步:基于原始数据集计算所有目标列的99分位数
q99_map = df[features].quantile(q=0.99, numeric_only=True).to_dict()

# 第二步:新增单独列存储对应列的被删除值,正常值位置填充空值
for col in features:
    # 大于99分位数的保留原值,其余位置填NA
    df[f'{col}_deleted'] = df[col].where(df[col] > q99_map[col], other=pd.NA)

# 第三步:可选操作,拆分清洗后的数据集和被删除的数据集
# 提取所有包含被删除值的行
deleted_df = df[df[[f'{col}_deleted' for col in features]].notna().any(axis=1)].copy()
# 生成清洗后的数据集
clean_df = df.drop(deleted_df.index).copy()

# 如果不需要在清洗后的数据里保留deleted列,可执行以下代码删除
clean_df = clean_df.drop(columns=[f'{col}_deleted' for col in features])

如果你确实需要保持原有逐列裁剪的逻辑(即第一列裁剪后的数据集再计算第二列的分位数),只需要把分位数计算的步骤放到循环内,每处理完一列更新一次df即可,异常值标记的逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:54:02