You need to enable JavaScript to run this app. Python如何识别大尺寸DataFrame每行指定列的最高值对应列
优惠活动
大模型
产品
解决方案
定价
更多

Python如何识别大尺寸DataFrame每行指定列的最高值对应列

逐行识别指定列最高值所属类别的实现方案
  • 适配规模为11列、17000行的DataFrame处理需求,全程不改动非目标列的原有内容,采用pandas向量化操作完成逐行最高值识别,避免逐行循环的低效率问题
  • 本次需求核心是对比男性人口、女性人口两列的数值大小,后续如果需要扩展为3列对比,仅需调整对比列的列表范围即可,逻辑完全通用

匹配题目结构的示例构造

按照给定的列结构与示例数据,先构造测试用DataFrame:

import pandas as pd

# 还原题目描述的DataFrame结构
df = pd.DataFrame({
    "Country": ["US", "China", "UK"],
    "Continent": ["NA", "Asia", "Europe"],
    "Population M": [10, 20, 75],
    "Population F": [9, 50, 10],
    "Total Population": [19, 70, 85]
})

核心实现步骤

  1. 锁定需要参与对比的目标列范围:本次需求的对比范围为男性人口、女性人口两列,若后续扩展为3列对比,直接将第三列的列名加入对比清单即可
  2. 调用idxmax(axis=1)逐行返回最大值对应的列名,再通过标签映射把原始列名转换为业务可读的判定结果
# 定义参与对比的列清单
compare_col_list = ["Population M", "Population F"]
# 逐行取最大值所属列,新增独立列存储判定结果
df["Dominant Gender Population"] = df[compare_col_list].idxmax(axis=1)

# 原始列名转成易懂的业务标签
label_map = {
    "Population M": "男性人口更高",
    "Population F": "女性人口更高"
}
df["Dominant Gender Population"] = df["Dominant Gender Population"].map(label_map)

示例输出结果说明

按照给定的示例数据跑完逻辑后的判定结果为:

  • 美国(US)行:男性人口10M > 女性人口9M,判定为男性人口更高
  • 中国(China)行:女性人口50M > 男性人口20M,判定为女性人口更高
  • 英国(UK)行:男性人口75M > 女性人口10M,判定为男性人口更高

实操注意事项

  • 这套向量化逻辑在17000行的数据规模下执行耗时为毫秒级,远快于iterrows()逐行遍历的写法,不要使用低效率的循环逻辑处理这类批量对比场景
  • 若对比列存在空值,idxmax()会默认跳过空值返回非空的最大值;如果需要将空值场景单独判定,可提前用fillna()给对比列填充指定默认值
  • 若遇到两列数值完全相等的平局场景,idxmax()会默认返回对比列表中位置靠前的列,可根据业务规则提前加判断逻辑处理平局场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 17:06:03