如何筛选指定列相同其他列存在差异的数据集行?
实现方案
核心逻辑:先按Name和Age两列分组,统计每个分组内Job的唯一值数量,保留唯一值数量大于1的分组下的所有行即可,以下是不同场景的实现代码:
SQL 实现
假设表名为 employee_jobs,可使用如下两种常用写法:
窗口函数写法(兼容MySQL 8.0+/PostgreSQL/Oracle等支持窗口函数的数据库)
WITH job_stat AS ( SELECT *, COUNT(DISTINCT Job) OVER(PARTITION BY Name, Age) AS distinct_job_num FROM employee_jobs ) SELECT Name, Age, Job, Start, End FROM job_stat WHERE distinct_job_num > 1;
子查询关联写法(兼容低版本数据库)
SELECT * FROM employee_jobs WHERE (Name, Age) IN ( SELECT Name, Age FROM employee_jobs GROUP BY Name, Age HAVING COUNT(DISTINCT Job) > 1 );
Python Pandas 实现
如果数据集存储在Pandas DataFrame中,可直接用分组过滤实现:
import pandas as pd # df 为原始数据集对应的DataFrame result = df.groupby(['Name', 'Age']).filter(lambda group: group['Job'].nunique() > 1)
内容的提问来源于stack exchange,提问作者S_241
相关产品推荐
相关产品推荐

