SQL:按分组变量抽样并筛选关联数据
抽取指定分组的全量关联数据
原始数据
| V1 | Group | time |
|---|---|---|
| a | g1 | 1 |
| b | g1 | 2 |
| c | g1 | 3 |
| d | g2 | 1 |
| e | g2 | 2 |
| f | g2 | 3 |
| g | g3 | 5 |
| h | g3 | 6 |
| i | g3 | 7 |
需求说明
抽取指定数量的分组样本,保留这些分组下的所有关联数据。例如抽样2个分组(g1、g3),期望得到如下结果:
| V1 | Group | time |
|---|---|---|
| a | g1 | 1 |
| b | g1 | 2 |
| c | g1 | 3 |
| g | g3 | 5 |
| h | g3 | 6 |
| i | g3 | 7 |
实现方案
方案1:Python pandas处理
import pandas as pd # 构造原始数据(实际场景可替换为读取文件/数据库) df = pd.DataFrame({ 'V1': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], 'Group': ['g1', 'g1', 'g1', 'g2', 'g2', 'g2', 'g3', 'g3', 'g3'], 'time': [1, 2, 3, 1, 2, 3, 5, 6, 7] }) # 方式A:指定目标分组 target_groups = ['g1', 'g3'] # 方式B:随机抽取2个分组 # target_groups = df['Group'].drop_duplicates().sample(n=2).tolist() # 筛选数据 result = df[df['Group'].isin(target_groups)] print(result)
方案2:SQL查询
假设数据表名为data_table:
- 指定分组查询:
SELECT * FROM data_table WHERE `Group` IN ('g1', 'g3');
- 随机抽取指定数量分组(以MySQL为例):
SELECT t.* FROM data_table t INNER JOIN ( SELECT DISTINCT `Group` FROM data_table ORDER BY RAND() LIMIT 2 ) sampled ON t.`Group` = sampled.`Group`;
内容的提问来源于stack exchange,提问作者David Harar
相关产品推荐
相关产品推荐

