You need to enable JavaScript to run this app. Pandas:如何将多列互斥年龄分组标识转换为单列年龄分组标签
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:如何将多列互斥年龄分组标识转换为单列年龄分组标签

Pandas多列互斥标签合并为单列的最优实现方案

核心实现(最高效简洁)

利用idxmax矢量化操作,直接提取每行最大值对应的列名,完美适配「每行仅一个1、分组互斥」的场景:

import pandas as pd

# 假设你的原始DataFrame变量名为df
# 提取年龄分组列做行维度最大值索引匹配,直接生成目标列
df["age_group"] = df[["21_30", "31_40", "40_49", "50_59"]].idxmax(axis=1)

# 如果仅需要保留age_group单列,可直接生成新结果表
df_result = df[["age_group"]]

方案说明

  • 该方法是Pandas原生矢量化操作,无额外循环开销,数据量越大性能优势越明显
  • 可读性高,逻辑直观:因为每行仅存在一个值为1的列,最大值的索引恰好对应需要的分组名称
  • 如果需要提前校验数据是否符合「分组互斥、每行仅一个分组」的规则,可以加一行校验逻辑:
# 校验所有行的分组标记和为1,避免全0/多1的异常数据
assert (df[["21_30", "31_40", "40_49", "50_59"]].sum(axis=1) == 1).all(), "存在不符合互斥规则的异常行"

备选实现

也可以用矩阵点积的方式实现,性能和上述方案相当:

df["age_group"] = df[["21_30", "31_40", "40_49", "50_59"]].dot(df.columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:39:03