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

如何筛选同一Id下存在不同salary的所有记录?

解决方案:筛选薪资存在差异的Id记录

针对需求——保留所有对应薪资存在差异的Id的全部记录,剔除薪资完全相同的Id的所有记录,以下是两种常用场景的实现方法:

一、SQL 数据库处理方案

如果数据存储在数据库中,可以通过子查询+关联的方式实现:

SELECT t.Id, t.salary
FROM your_table t
INNER JOIN (
    -- 先筛选出薪资存在不同值的Id
    SELECT Id
    FROM your_table
    GROUP BY Id
    HAVING COUNT(DISTINCT salary) > 1
) sub ON t.Id = sub.Id
ORDER BY t.Id, t.salary;

逻辑说明:

  • 子查询通过GROUP BY Id分组,用COUNT(DISTINCT salary)统计每个Id下的薪资唯一值数量,数量大于1说明该Id存在薪资差异;
  • 将原表与子查询结果关联,取出符合条件的Id的所有记录。

二、Python Pandas 本地数据处理方案

如果是本地数据集,可以用Pandas快速处理:

import pandas as pd

# 构造示例数据(实际可替换为读取文件,如pd.read_csv)
data = pd.DataFrame({
    'Id': [101, 101, 102, 102, 105, 105, 105, 106, 106, 106],
    'salary': [1000, 1000, 2500, 3000, 5000, 5000, 5000, 12, 142, 12]
})

# 筛选出薪资存在差异的Id列表
valid_ids = data.groupby('Id')['salary'].nunique() > 1
valid_ids = valid_ids[valid_ids].index

# 提取符合条件的记录
result = data[data['Id'].isin(valid_ids)]

# 打印结果(无索引)
print(result.to_string(index=False))

逻辑说明:

  • 用groupby('Id')['salary'].nunique()计算每个Id的薪资唯一值数量,筛选出数量大于1的Id;
  • 用isin()方法从原数据中提取这些Id的所有记录,得到最终结果。

运行后输出结果与期望一致:

102 2500  
102 3000  
106 12  
106 142  
106 12  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:31:17