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

基于groupid与ename分组,标记非最高分重复项至新列

分组标记非最高分项为重复项

原始数据

import pandas as pd

data =[['a',96.21623993,1],
['a',99.88211060,1],
['b',99.90232849,1],
['b',99.91232849,1],
['b',99.91928864,1],
['c',99.89162445,1],
['d',99.95264435,1],
['a',99.82862091,2],
['a',99.84466553,2],
['b',99.89685059,2],
['c',78.10614777,2],
['c',97.73305511,2],
['d',95.42383575,2],
]

df = pd.DataFrame(data, columns=['ename','score', 'groupid'])

需求

按groupid和ename分组,新增duplicate列:

  • 每组中非最高分的行标记为TRUE
  • 每组中最高分的行标记为FALSE

实现代码

# 按groupid和ename分组,计算每组最高分并对比生成标记列
df['duplicate'] = ~(df['score'] == df.groupby(['groupid', 'ename'])['score'].transform('max'))
# 将布尔值转换为大写字符串,匹配期望输出格式
df['duplicate'] = df['duplicate'].map({True: 'TRUE', False: 'FALSE'})

# 打印结果
print(df.to_string(index=False))

输出结果

ename     score  groupid duplicate
    a  96.216240        1      TRUE
    a  99.882111        1     FALSE
    b  99.902328        1      TRUE
    b  99.912328        1      TRUE
    b  99.919289        1     FALSE
    c  99.891624        1     FALSE
    d  99.952644        1     FALSE
    a  99.828621        2      TRUE
    a  99.844666        2     FALSE
    b  99.896851        2     FALSE
    c  78.106148        2      TRUE
    c  97.733055        2     FALSE
    d  95.423836        2     FALSE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:27:46