You need to enable JavaScript to run this app. 如何删除DataFrame行最高值/绝对值最大值并计算剩余值均值
优惠活动
大模型
产品
解决方案
定价
更多

如何删除DataFrame行最高值/绝对值最大值并计算剩余值均值

高效实现方案

两个场景核心逻辑一致:对每组5个待计算数值,按规则剔除1个极值后,对剩余4个值求均值。全部采用pandas向量化操作实现,比逐组循环的处理效率高1~2个数量级,适配大数据量场景。
首先导入依赖:

import pandas as pd

场景1:剔除组内最大值后求均值

计算规则:每组5个值中移除最大值(不关注最大值所在位置,仅保证最终保留4个值),对剩余值计算均值。

实现代码

# 原始示例数据
df1 = {"A":[78, 45, 50, 85, 63],
      "B":[52, 67, 81, 65, 83],
      "C":[67, 55, 81, 62, 58]}
# 转换为行索引对应计算组、每行包含组内5个数值的结构
df1 = pd.DataFrame.from_dict(df1, orient="index")
# 定位每行最大值的列位置(自动处理并列最大值,仅删除第一个出现的最大值)
max_pos = df1.idxmax(axis=1)
# 将对应最大值位置置为空值,pandas求均值时会自动跳过空值
df1.loc[df1.index, max_pos] = pd.NA
# 按组计算剩余值的均值
res1 = df1.mean(axis=1)

结果验证

运行后输出结果完全匹配预期:

  • A组结果为59.0
  • B组结果为66.25
  • C组结果为60.5

场景2:剔除组内绝对值最大的数后求均值

计算规则:每组5个值中移除绝对值最大的数(即与零偏差最大的值,保留原始正负符号计算剩余值均值)。

实现代码

# 原始示例数据
df2 = {"A":[-78, 45, -50, 85, -63],
      "B":[-52, 67, -81, 65, -83],
      "C":[67, -55, 81, -62, 58]}
# 转换为行索引对应计算组的结构
df2 = pd.DataFrame.from_dict(df2, orient="index")
# 计算每个值的绝对值,定位每行绝对值最大的位置
abs_max_pos = df2.abs().idxmax(axis=1)
# 将对应位置置为空值
df2.loc[df2.index, abs_max_pos] = pd.NA
# 按组计算剩余值的均值
res2 = df2.mean(axis=1)

结果验证

运行后输出结果完全匹配预期:

  • A组结果为-36.5
  • B组结果为-0.25
  • C组结果为2.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 10:24:05