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

如何为DataFrame添加对应分组最大值的分类标签列

解决方案:为DataFrame分组添加最大值对应的分类标签列

针对你需要按trial和word分组,将每组value最大值对应的point标签填充到该组所有行的需求,以下是两种高效实现方法:

方法1:使用groupby.transform直接生成列

这是最简洁的方式,通过transform将分组计算的结果直接广播回原DataFrame:

import pandas as pd

# 假设你的数据存储在df中
df['max_point'] = df.groupby(['trial', 'word'])['value'].transform(
    lambda x: df.loc[x.idxmax(), 'point']
)

代码说明:

  • groupby(['trial', 'word']):按指定的两个分类列进行分组
  • transform方法会保留原DataFrame的索引结构,将每组的计算结果映射到对应行
  • x.idxmax()获取当前组内value最大值所在的行索引,再通过df.loc取出该行的point值,最终填充到当前组的所有行中

方法2:先构建映射表再合并

如果需要更清晰的步骤拆分,可以先生成分组与对应max_point的映射关系,再合并到原数据:

# 生成(trial, word)到max_point的映射表
max_point_map = df.groupby(['trial', 'word']).apply(
    lambda group: group.loc[group['value'].idxmax(), 'point']
).reset_index(name='max_point')

# 合并映射表到原DataFrame
df = df.merge(max_point_map, on=['trial', 'word'], how='left')

代码说明:

  • groupby.apply对每个分组执行逻辑,找到该组value最大的行对应的point
  • reset_index将分组索引转换为普通列,生成结构化的映射表
  • merge通过trial和word两个键,将映射表中的max_point列添加到原数据的对应行

两种方法都能得到你预期的结果,执行后df会新增max_point列,每个分组内的所有行都会填充该组value最大值对应的point标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:52:37