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

如何在Pandas DataFrame中添加计算每行前5值平均值的新列

在Pandas DataFrame中新增每行前5个最大值的平均值列

需求说明

需要为Pandas DataFrame添加一列,计算每行中前5个最大值的平均值,对应Excel中的公式:=AVERAGE(LARGE(B2:K2,{1,2,3,4,5}))。

示例数据

import pandas as pd
import random

random.seed(0)

df = pd.DataFrame({
    'A': random.choices(range(10), k=10),
    'B': random.choices(range(10), k=10),
    'C': random.choices(range(10), k=10),
    'D': random.choices(range(10), k=10),
    'E': random.choices(range(10), k=10),
    'F': random.choices(range(10), k=10),
    'G': random.choices(range(10), k=10),
    'H': random.choices(range(10), k=10),
    'I': random.choices(range(10), k=10),
    'J': random.choices(range(10), k=10)})

最优解决方案

方法1:Pandas原生简洁实现

直接按行调用nlargest提取前5个最大值,再计算平均值:

# 新增top_5_avg列
df['top_5_avg'] = df.apply(lambda row: row.nlargest(5).mean(), axis=1)
  • axis=1指定按行处理,row.nlargest(5)取出当前行的前5个最大值,.mean()计算它们的平均值。

方法2:Numpy高效实现(适合大数据集)

如果DataFrame行数较多,用Numpy排序方法性能更优:

import numpy as np

# 每行降序排序后取最后5个值(最大的5个),再计算均值
df['top_5_avg'] = np.sort(df.values, axis=1)[:, -5:].mean(axis=1)
  • np.sort(df.values, axis=1)对每行进行升序排序,[:, -5:]截取每行最后5个元素(即最大的5个),.mean(axis=1)计算每行的均值。

错误用法说明

之前尝试的df['A'].nlargest(5).mean()仅针对单列A计算整个列的前5个最大值的平均值,并非按行处理,因此无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:35:12