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

Python中按特定ID组删除重复Salary行(保留最后一条)

Pandas按组保留特定Salary值最后一行的实现方法

问题说明

现有如下Pandas数据集:

# 导入依赖库
import pandas as pd

# 创建数据集
data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1,1, 1, 1, 1, 1,
               2, 2, 2, 2, 2, 2,2,2,2,2,
               3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        'Salary': [7, 7, 7, 7, 7,7,7,8,9,10,11,12,13,14,15,
                   4, 4, 4,4,5,6,7,8,9,10,
                   8, 8, 8, 8,8,8,8,8,9,10,11,12,13],
        'Children': ['No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No',
                     'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No',
                     'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No','Yes', 'Yes', 'No','No', 'Yes'],
        'Days': [123, 128, 66, 120, 141,123, 128, 66, 120, 141, 52,96, 120, 141, 52,
                 96, 120,120, 141, 52,96,128, 66, 120, 141,
                 120, 141,123,15,85,36,58,89,123, 128, 66, 120, 141],
        }

# 转为DataFrame
df = pd.DataFrame(data)
print("原始数据:\n", df)

需要实现的规则:

  • 对id=1的组,删除所有Salary=7的行,仅保留最后一条
  • 对id=2的组,删除所有Salary=4的行,仅保留最后一条
  • 对id=3的组,删除所有Salary=8的行,仅保留最后一条

实现方案

可以通过拆分数据-分别处理-合并结果的方式高效完成,代码如下:

# 定义每个id对应的目标Salary值
salary_rules = {1: 7, 2: 4, 3: 8}

# 1. 筛选出不需要处理的行:Salary不属于对应id的目标值
non_target_rows = df[~df.apply(lambda row: row['Salary'] == salary_rules.get(row['id']), axis=1)]

# 2. 筛选出需要处理的行,按id和Salary分组后只保留每组最后一行
target_rows = df[df.apply(lambda row: row['Salary'] == salary_rules.get(row['id']), axis=1)] \
               .groupby(['id', 'Salary']) \
               .last() \
               .reset_index()

# 3. 合并两部分数据,并按原索引排序
result_df = pd.concat([non_target_rows, target_rows]).sort_index()

# 查看结果
print("处理后的数据:\n", result_df)

方案说明

  1. 拆分数据:把数据集分成两类,一类是不需要去重的普通行,一类是需要保留最后一行的目标行
  2. 处理目标行:对目标行按id和Salary分组,用groupby().last()直接获取每组的最后一条记录
  3. 合并结果:把普通行和处理后的目标行合并,再按原索引排序,保证数据顺序和原表一致

验证结果

处理后的数据中:

  • id=1组仅保留最后一条Salary=7的行,其余Salary=7的行被删除
  • id=2组仅保留最后一条Salary=4的行,其余Salary=4的行被删除
  • id=3组仅保留最后一条Salary=8的行,其余Salary=8的行被删除
    其他行均完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:15:10