如何筛选同一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
相关产品推荐
相关产品推荐

