如何在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
相关产品推荐
相关产品推荐

