如何用公式或工具对相似文本格式的土地所有者名称自动分组?
可行分组方案推荐
方法1:Excel 自定义公式+手动微调(适合小数据集)
先统一文本格式再生成分组索引,操作简单易上手:
- 第一步:新增辅助列(比如C列)标准化文本,用公式统一大小写、去除冗余符号和空格:
注:可根据实际文本情况,添加更多=PROPER(SUBSTITUTE(SUBSTITUTE(TRIM(A2), ".", ""), ",", ""))SUBSTITUTE()处理其他特殊符号(比如连字符、顿号) - 第二步:在B2生成分组索引,输入公式后下拉:
相同标准化文本会得到一致索引,对于拼写变体类的细微差异,直接修改辅助列的对应文本,索引会自动同步更新。=MATCH(C2, $C$2:$C$1000, 0)
方法2:Power Query 模糊分组(适合中等数据集)
无需预设匹配列表,自带模糊匹配分组功能:
- 将数据导入Power Query(菜单栏「数据」>「自表格/区域」)
- 选中所有者名称列,点击「转换」>「分组依据」
- 选择「高级」模式,分组列选名称列,点击「添加分组」,操作选「所有行」,自定义新列名(比如「组内明细」)
- 点击「选项」,勾选「使用模糊匹配」,调整相似度阈值(建议从0.8开始测试,数值越高分组越严格)
- 确认后自动完成相似文本分组,再添加索引列(「添加列」>「索引列」>「从1开始」),最后展开「组内明细」列,即可得到带分组索引的完整数据。
方法3:Python 字符串相似度匹配(适合大数据集)
用rapidfuzz库批量处理,灵活调整分组规则:
- 先安装依赖库:
pip install rapidfuzz pandas - 核心代码示例(可直接套用):
注:import pandas as pd from rapidfuzz import process, fuzz from collections import defaultdict # 读取数据 df = pd.read_excel("土地所有者列表.xlsx") name_list = df["所有者名称"].tolist() groups = defaultdict(list) processed_names = set() # 批量匹配相似文本 for name in name_list: if name not in processed_names: # 匹配相似度≥80的文本,可调整score_cutoff数值 matches = process.extract(name, name_list, scorer=fuzz.token_sort_ratio, score_cutoff=80) matched_names = [item[0] for item in matches] for n in matched_names: groups[name].append(n) processed_names.add(n) # 分配分组索引 index_map = {} current_idx = 1 for group_key in groups: for name in groups[group_key]: index_map[name] = current_idx current_idx += 1 df["分组索引"] = df["所有者名称"].map(index_map) df.to_excel("分组结果.xlsx", index=False)token_sort_ratio适合处理语序不同的相似文本(比如"王家庄 李记"和"李记 王家庄"),可替换为fuzz.partial_ratio处理前缀/后缀相似的文本。
内容的提问来源于stack exchange,提问作者nick lanta
相关产品推荐
相关产品推荐

