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

如何在Pandas DataFrame中处理实验重复列的变异值与离群值

解决Pandas重复列的变异值计算与异常值剔除需求

嘿,这需求拆成两步就很好实现啦,我给你一步步拆解并附上实操代码:

1. 计算每行的变异值(最大值-最小值)

首先搞定variation列的计算,直接用Pandas的行级聚合函数就行,一行代码就能搞定:

import pandas as pd

# 先模拟一份示例数据方便测试(你替换成自己的DataFrame就行)
data = {
    'a': [15, 22, 5, 30],
    'b': [17, 25, 7, 10],
    'c': [16, 23, 6, 5]
}
df = pd.DataFrame(data)

# 计算每行的变异值:最大值减最小值,存入新列
df['variation'] = df[['a', 'b', 'c']].max(axis=1) - df[['a', 'b', 'c']].min(axis=1)

运行后,你的DataFrame就会新增一列variation,记录每行三个重复值的差值。

2. 剔除变异值大于10时偏离最大的重复值

接下来处理需要剔除异常值的场景,咱们写个自定义函数,再用apply逐行处理:

def process_outliers(row):
    # 取出当前行的三个重复值
    vals = row[['a', 'b', 'c']].tolist()
    # 如果变异值超过10,就剔除偏离程度最大的那个值
    if row['variation'] > 10:
        # 计算该行均值,找到偏离均值最远的元素索引
        mean_val = sum(vals) / len(vals)
        abs_diff = [abs(x - mean_val) for x in vals]
        outlier_idx = abs_diff.index(max(abs_diff))
        # 移除异常值
        vals.pop(outlier_idx)
    # 变异值≤10的行,直接保留所有原始值
    return vals

# 生成处理后的数据列
df['processed_data'] = df.apply(process_outliers, axis=1)

举个例子,模拟数据里的第四行a=30, b=10, c=5,变异值是25(远大于10),均值约15,30和均值的差值最大,所以会被剔除,最终processed_data列里存的是[10,5]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:00:02