You need to enable JavaScript to run this app. 如何按城市分组调用自定义函数删除DataFrame中销售数据的离群值
优惠活动
大模型
产品
解决方案
定价
更多

如何按城市分组调用自定义函数删除DataFrame中销售数据的离群值

实现方案

最优实现基于Pandas的groupby+向量化操作完成,不需要循环遍历城市,性能远高于逐组循环的实现,同时可以避免原有isin逻辑的误判问题。


步骤1:调整离群值检测逻辑(可选但更高效)

直接返回单组内每个值是否为离群值的布尔掩码,避免返回列表再匹配的开销:

import numpy as np
import pandas as pd

def is_discrete_outlier(data, threshold=3):
    mean = np.mean(data)
    std = np.std(data)
    z_score = (data - mean) / std
    return np.abs(z_score) > threshold

步骤2:按城市分组计算离群值并过滤

# 按城市分组,对每个城市的销售额单独计算离群值掩码
outlier_mask = df.groupby('City')['Sales'].transform(is_discrete_outlier)
# 剔除离群值,保留正常数据
df = df[~outlier_mask]

注意:请将代码中的列名替换为你实际DataFrame的列名,保持大小写一致。


如果你不想修改原有检测函数

也可以用groupby.apply适配原有逻辑,不过性能略低于上面的方案:

df = df.groupby('City').apply(
    lambda group: group[~group['Sales'].isin(detect_discrete_outliers(group['Sales']))]
).reset_index(drop=True)

方案优势

  • 完全基于Pandas向量化操作,数据量越大性能优势越明显
  • 自动适配所有城市,新增城市无需修改代码
  • 避免了不同城市出现相同销售额时,isin逻辑误删其他城市正常数据的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:42:01