按RANK分组识别CountryList1存在但CountryList2缺失的国别代码
嘿,我来帮你搞定这个需求!要找出指定RANK分组里只在CountryList1出现、没在CountryList2出现的国别代码,咱们可以分两种常用场景来实现:
方法一:用Excel公式实现
如果你的数据在Excel里,用动态数组公式就能轻松搞定,步骤如下:
先假设你的数据结构是这样的(和你描述的示例匹配):
RANK CountryList1 CountryList2 1 US HN 2 HN CA 新增一列比如“仅在List1存在的代码”,然后输入以下公式(Excel 365/2021直接回车,老版本按
Ctrl+Shift+Enter触发数组计算):=TEXTJOIN("|",TRUE,FILTER(TEXTSPLIT(B2,"|"),ISNA(XMATCH(TEXTSPLIT(B2,"|"),TEXTSPLIT(C2,"|")))*(A2=指定RANK值)))公式拆解:
TEXTSPLIT(B2,"|"):把竖线分隔的国别列表拆成单个代码的数组XMATCH(...):检查List1的每个代码是否在List2中,找不到就返回#N/AISNA(...):把#N/A转为TRUE,找到的转为FALSE,筛选出不在List2的代码*(A2=指定RANK值):只保留当前行RANK等于目标值的结果TEXTJOIN("|",TRUE,...):把筛选后的代码重新用竖线拼接成字符串
替换公式里的
指定RANK值为1,就能得到HN|JP|SK|KY;替换为2则得到HN。
方法二:用Python脚本实现
如果数据量较大或者需要自动化处理,用Python脚本更高效,示例代码如下:
# 模拟你的数据表数据(实际使用时可以从CSV/Excel读取) data = [ {"RANK": 1, "CountryList1": "US|HN|JP|SK|KY", "CountryList2": "US|CA|MX|GB"}, {"RANK": 2, "CountryList1": "HN|CA|AU", "CountryList2": "CA|AU|GB"} ] def get_unique_countries(target_rank): for row in data: if row["RANK"] == target_rank: # 把列表转成集合,利用集合的差集特性找唯一值 list1_set = set(row["CountryList1"].split("|")) list2_set = set(row["CountryList2"].split("|")) unique_codes = list1_set - list2_set return "|".join(unique_codes) return "" # 测试目标RANK print(f"RANK=1时仅在List1存在的代码:{get_unique_countries(1)}") print(f"RANK=2时仅在List1存在的代码:{get_unique_countries(2)}")
运行后会输出:
- RANK=1结果:
HN|JP|SK|KY - RANK=2结果:
HN
内容的提问来源于stack exchange,提问作者SVaidya
相关产品推荐
相关产品推荐

