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

如何筛选包含全部观测值的分组数据集

筛选包含全部观测值的分组

原始数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:10:37