如何用Python提取Excel中字母无重叠的唯一行?
提取Excel中满足字母完全唯一条件的行
需求:筛选出letters列中所有字母均未出现在其他行letters列的行,示例数据如下:
| id | letters |
|---|---|
| 1 | A,B,G |
| 2 | B,G |
| 30 | E |
| 40 | E,F |
| 21 | C,D |
| 35 | K,M |
预期输出(C、D、K、M未在其他单元格出现):
| id | letters |
|---|---|
| 21 | C,D |
| 35 | K,M |
方法一:公式法(适合中小数据量)
新增辅助列(如C列),在C2单元格输入以下公式,下拉填充:
=SUMPRODUCT(--ISNUMBER(SEARCH(TEXTSPLIT(B2,","),TEXTJOIN(",",TRUE,$B$1:$B$6))))=LEN(TEXTSPLIT(B2,","))
- 逻辑说明:
TEXTSPLIT(B2,","):将当前行的letters拆分为单个字母TEXTJOIN(",",TRUE,$B$1:$B$6):合并所有行的letters为一个字符串SEARCH(...):检查每个拆分出的字母是否在合并字符串中出现SUMPRODUCT(--ISNUMBER(...)):统计当前行字母的总出现次数,若等于当前行字母数量,说明所有字母仅在本行出现
- 筛选辅助列为
TRUE的行,即为目标结果
方法二:Power Query法(适合数千行大数据量)
- 选中数据区域,点击「数据」选项卡 → 「从表格/区域」,导入Power Query编辑器(勾选「我的表格有标题」)
- 拆分字母为行:选中
letters列 → 「转换」选项卡 → 「拆分列」→ 「按分隔符」,选择逗号,拆分方式选「拆分为行」 - 统计字母出现次数:点击「开始」→ 「分组依据」,分组列选
letters,新列名设为「出现次数」,操作选择「计数行」,得到字母出现次数表 - 筛选目标行:
- 回到原始数据查询(可通过左侧查询列表切换),再次拆分
letters列为行 - 点击「合并查询」→ 「合并查询作为新查询」,将当前表与字母出现次数表按
letters列合并,添加「出现次数」列 - 筛选「出现次数」列等于1的行,然后点击「分组依据」,分组列选
id和原始letters列,操作选「所有行」(或直接合并行)
- 回到原始数据查询(可通过左侧查询列表切换),再次拆分
- 点击「关闭并上载」,即可将结果加载回Excel
内容的提问来源于stack exchange,提问作者abcabc
相关产品推荐
相关产品推荐

