如何不用循环筛选分组后所有行均满足另一列条件的目标数值
无循环实现方案
以下是不同场景下的简单实现,都不需要写循环逻辑:
SQL 场景
直接通过分组聚合+条件过滤实现:
SELECT num FROM 你的表名 GROUP BY num HAVING COUNT(*) = COUNT(`Check-in`);
逻辑说明:
COUNT(*)统计当前num分组下的总行数,COUNT(列名)会自动忽略该列的null值,两者相等即代表该分组下所有行的Check-in都不为空,完全匹配需求。如果要适配其他自定义判断条件,比如要求Check-in全部等于'X',可以把HAVING条件改成:HAVING SUM(CASE WHEN `Check-in` != 'X' OR `Check-in` IS NULL THEN 1 ELSE 0 END) = 0
Python Pandas 场景
用分组过滤一行代码实现:
import pandas as pd # 假设你的数据存储在DataFrame变量df中 # 得到符合条件的num数组 res_num = df.groupby('num').filter(lambda g: g['Check-in'].notna().all())['num'].unique() # 如果需要转成逗号分隔的字符串:','.join(map(str, res_num.tolist()))
逻辑说明:按
num分组后,filter会保留满足判断条件的分组,notna().all()校验该分组下所有Check-in值都非空,最后取去重后的num值即可。
Excel 场景
用函数组合直接生成结果:
=UNIQUE(FILTER(A2:A100,COUNTIFS(A:A,A2:A100,B:B,"<>")=COUNTIF(A:A,A2:A100)))
逻辑说明:A列为
num列,B列为Check-in列,COUNTIFS统计每个num对应的非空Check-in行数,COUNTIF统计每个num的总行数,两者相等的num会被筛选出来,最后用UNIQUE去重得到最终结果。
内容的提问来源于stack exchange,提问作者itsgarbled
相关产品推荐
相关产品推荐

