如何在Excel或Python中实现指定规则的多条件区域筛选?
实现特定区域筛选需求的方案(Excel & Python)
Excel 实现方法
方法1:辅助列+筛选
假设数据在A(Name)、B(region)列,输入的筛选区域写在D1单元格(多区域用逗号分隔,比如HK,SG),在C列(辅助列)输入以下公式:
=LET( name_regions, FILTER(B:B, A:A=A2), input_regions, TEXTSPLIT(D1, ", "), name_set, UNIQUE(name_regions), input_set, UNIQUE(input_regions), IF( AND(COUNTA(name_set)=COUNTA(input_set), SUM(--ISNUMBER(MATCH(name_set, input_set, 0)))=COUNTA(name_set)), "保留", "" )
公式逻辑:
- 提取当前Name对应的所有区域并去重,得到该Name的专属区域集合
- 拆分输入的筛选区域并去重,得到输入集合
- 对比两个集合:若完全一致(数量相同且元素全匹配),标记"保留",否则为空
之后直接筛选C列的"保留"即可:
- 输入
SG时,XYZ的区域集合{SG}与输入匹配,标记保留;ABC的集合{HK,SG}不匹配,无标记 - 输入
HK,SG时,ABC的集合与输入完全匹配,标记保留;XYZ的集合不匹配,无标记 - 输入
HK时,无Name的区域集合为{HK},无保留标记
方法2:高级筛选(自定义条件)
无需辅助列,可借助高级筛选的自定义条件区域:
- 匹配同时含HK和SG的Name(输入
HK,SG时用):
条件区域D1写region,D2写公式:=SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="HK"))>0 * SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="SG"))>0 - 匹配仅含SG的Name(输入
SG时用):
条件区域D2写公式:=SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="HK"))=0 * SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="SG"))>0 - 输入
HK时,条件区域D2写公式=SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="HK"))>0 * SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100="SG"))=0,此时无符合条件的Name,筛选结果为空。
Python 实现方法(使用Pandas)
通过分组对比区域集合实现需求:
import pandas as pd # 示例数据 data = { "Name": ["ABC", "ABC", "XYZ"], "region": ["HK", "SG", "SG"] } df = pd.DataFrame(data) def filter_by_region(input_regions): input_set = set(input_regions.split(", ")) # 分组获取每个Name对应的区域集合 name_region_sets = df.groupby("Name")["region"].apply(set).reset_index(name="region_set") # 筛选区域集合与输入完全匹配的Name result = name_region_sets[name_region_sets["region_set"] == input_set]["Name"].tolist() return result # 测试示例 print(filter_by_region("SG")) # 输出 ['XYZ'] print(filter_by_region("HK, SG")) # 输出 ['ABC'] print(filter_by_region("HK")) # 输出 []
逻辑说明:
- 将输入的区域字符串转换为集合,方便对比
- 按Name分组,提取每个Name对应的所有区域并转成集合
- 筛选出区域集合与输入集合完全匹配的Name,返回结果
内容的提问来源于stack exchange,提问作者Suraj Ghorai
相关产品推荐
相关产品推荐

