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

Python DataFrame自定义去重:按规则保留指定优先级数据

Python DataFrame 按规则去重实现

需求说明

需要对DataFrame执行两项去重规则:

  • 规则1:当Name、math、physics字段值完全相同时(仅quarter不同),保留最后一行(如Jack的两行仅保留2Q记录)
  • 规则2:当David的行与其他行的math、physics字段值相同时,删除David的所有对应行

完整代码实现

import pandas as pd

# 构造输入DataFrame
data = [
    ['Jack', '1Q', 90, 100],
    ['Jack', '2Q', 90, 100],
    ['Kevin', '1Q', 45, 20],
    ['David', '1Q', 15, 60],
    ['Adam', '1Q', 15, 60],
    ['David', '2Q', 40, 75],
    ['Adam', '2Q', 40, 75]
]
df = pd.DataFrame(data, columns=['Name', 'quarter', 'math', 'physics'])

# 处理规则2:删除与其他行math、physics重复的David行
# 提取非David行的math+physics唯一组合
non_david_combinations = df[df['Name'] != 'David'][['math', 'physics']].drop_duplicates()
# 筛选出需要删除的David行
david_to_drop = df[(df['Name'] == 'David') & df[['math', 'physics']].apply(tuple, axis=1).isin(non_david_combinations.apply(tuple, axis=1))]
# 删除目标行
df = df.drop(david_to_drop.index)

# 处理规则1:按Name、math、physics去重,保留最后一行
df = df.drop_duplicates(subset=['Name', 'math', 'physics'], keep='last')

print(df)

代码解释

  1. 规则2处理:
    • 先提取所有非David行的math和physics的唯一组合,锁定需要排查的重复特征
    • 筛选出David行中math、physics匹配上述组合的记录,直接删除
  2. 规则1处理:
    • 以Name、math、physics为分组依据去重,保留每组最后一行(对应不同quarter的最新记录)

执行结果

Name quarter  math  physics
1   Jack      2Q    90      100
2  Kevin      1Q    45       20
4   Adam      1Q    15       60
6   Adam      2Q    40       75

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:25:42