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

Pandas如何忽略非数值列 计算每行前n个最大值的平均值生成新列

Pandas逐行提取前N个最大值计算平均值实现方案

核心实现逻辑

  • 自动识别DataFrame中所有数值类型列,无需手动排除time这类非数值字段
  • 逐行对数值做排序,提取指定数量的最大数值
  • 计算提取出的数值的平均值,存入独立新列

测试数据构建

直接运行下方代码即可生成示例用的测试DataFrame:

import pandas as pd
import numpy as np

time = ['11:50', '12:50', '13:50']
data_1 = {'time': time,
          'n1': [1, 5, 8],
          'n2': [2, 6 ,7],
          'n3': [3, 7 ,6],
          'n4': [4, 8, 5],
        }

df1 = pd.DataFrame(data = data_1)

核心计算代码

以提取每行最大2个数值、计算平均值存入Average_largest_2_column列为例,代码如下:

# 配置需要提取的最大值个数,修改该值即可适配不同需求
top_n = 2
# 自动筛选所有数值类型列,自动跳过非数值字段
numeric_columns = df1.select_dtypes(include=np.number).columns
# 逐行计算前top_n个最大值的平均值,赋值到新列
df1['Average_largest_2_column'] = df1[numeric_columns].apply(
    lambda x: x.nlargest(top_n).mean(),
    axis=1
)

运行效果

运行后输出的DataFrame效果如下,和预期完全一致:

timen1n2n3n4Average_largest_2_column
11:5012343.5
12:5056787.5
13:5087657.5

说明:如果需要计算前3、前4个最大值的平均,只需要修改top_n的赋值即可,代码会自动适配,无需调整其他逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:00:49