如何筛选包含全部观测值的分组数据集
筛选包含全部观测值的分组
原始数据
group observation A red A blue A green B red B red B green C blue C red C green
需求说明
筛选出包含所有观测值类型的分组,即每个分组必须至少存在red、blue、green这三种观测值中的每一种。
实现方法(SQL版)
通过统计每个分组内的唯一观测值数量,与全局唯一观测值总数对比来筛选:
-- 先统计全局唯一观测值的总数 WITH total_obs_types AS ( SELECT COUNT(DISTINCT observation) AS total_types FROM your_table ), group_obs_stats AS ( SELECT `group`, COUNT(DISTINCT observation) AS unique_obs_count FROM your_table GROUP BY `group` ) -- 关联筛选出符合条件的分组数据 SELECT t.* FROM your_table t JOIN group_obs_stats g ON t.`group` = g.`group` JOIN total_obs_types tot ON g.unique_obs_count = tot.total_types;
实现方法(Python Pandas版)
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'observation': ['red', 'blue', 'green', 'red', 'red', 'green', 'blue', 'red', 'green'] }) # 获取所有唯一的观测值类型 all_obs = set(df['observation'].unique()) # 筛选出包含全部观测值的分组 valid_groups = df.groupby('group')['observation'].apply(lambda x: set(x) == all_obs).index # 提取最终结果 result_df = df[df['group'].isin(valid_groups)] print(result_df)
最终筛选结果
group observation A red A blue A green C blue C red C green
内容的提问来源于stack exchange,提问作者novice_coder
相关产品推荐
相关产品推荐

