如何筛选指定Group值为该行最小Group值的数据行
问题描述
现有如下结构的数据:
| Col1 | Col2 | ..... | Group |
|---|---|---|---|
| A | B | 100 | |
| A | B | 200 | |
| A | C | 100 | |
| A | D | 200 |
需求:当指定一个Group值时,仅筛选出同一维度(Col1、Col2等其他列完全相同的行组)的最小Group值等于该指定值的行。例如指定Group=200时,仅返回第四行(A、D、200)——因为A、B组的最小Group是100,所以该行组里的200行不纳入结果。
解决方法
1. SQL 实现
利用窗口函数先计算每个分组(所有除Group外的列)的最小Group值,再筛选符合条件的行:
WITH grouped_data AS ( SELECT *, MIN("Group") OVER (PARTITION BY Col1, Col2 /* 这里列出所有非Group列 */) AS min_group FROM your_table ) SELECT Col1, Col2, "Group" /* 按需选择需要返回的列 */ FROM grouped_data WHERE min_group = 200 /* 替换为你的指定Group值 */ AND "Group" = 200;
2. Python Pandas 实现
通过分组计算最小Group,合并后筛选:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'Col1': ['A', 'A', 'A', 'A'], 'Col2': ['B', 'B', 'C', 'D'], 'Group': [100, 200, 100, 200] }) # 计算每个分组的最小Group值 min_group = df.groupby(['Col1', 'Col2'])['Group'].min().reset_index(name='min_group') # 合并数据并筛选 target = 200 result = df.merge(min_group, on=['Col1', 'Col2']) result = result[(result['min_group'] == target) & (result['Group'] == target)] print(result)
运行结果:
Col1 Col2 Group min_group 3 A D 200 200
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

