基于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
相关产品推荐
相关产品推荐

