Python中如何合并名称列含相似名称的行并拼接对应URL字段
Python实现路径类相似名称的行合并
针对层级路径类的名称合并需求,核心是先识别每个路径对应的存在于数据集内的最短前缀根路径,再按根路径分组拼接url字段,不需要硬编码前缀规则,适配任意层级的路径结构。
实现步骤
- 加载原始数据为pandas DataFrame,将所有name值存入集合,用于后续快速判断前缀是否存在
- 对每一行的路径,按
/从左到右逐级拼接短路径,找到第一个存在于name集合中的路径,即为该行归属的根名称 - 按识别出的根名称分组,将同组内的url用逗号拼接,输出最终结果
完整代码
import pandas as pd # 替换为你的数据读取逻辑,例:df = pd.read_csv("your_file.csv") df = pd.DataFrame([ {"name": "downloads/john joe", "url": "www.A.com"}, {"name": "downloads/john joe/2", "url": "www.AB.com"}, {"name": "downloads/john joe/94", "url": "www.ABC.com"}, {"name": "downloads/john joe/94/100", "url": "www.ABCD.com"}, {"name": "downloads/apple chew/134", "url": "www.BBC.com"}, ]) name_set = set(df["name"].tolist()) def match_root(full_path: str) -> str: path_segments = full_path.split("/") # 从最短路径开始匹配,找到第一个存在于数据集内的前缀作为根 for seg_count in range(1, len(path_segments) + 1): check_prefix = "/".join(path_segments[:seg_count]) if check_prefix in name_set: return check_prefix return full_path df["root_key"] = df["name"].apply(match_root) # 分组拼接url result = df.groupby("root_key", as_index=False)["url"].agg(", ".join).rename(columns={"root_key": "name"})
运行代码后得到的结果完全匹配预期:
| name | url |
|---|---|
| downloads/john joe | www.A.com, www.AB.com, www.ABC.com, www.ABCD.com |
| downloads/apple chew/134 | www.BBC.com |
说明
- 该方案自动适配路径层级,不需要提前指定前缀长度,只要根路径存在于原始数据的name列中即可正确归并
- 此前遍历+concat未得到预期结果,通常是因为没有做最短根路径匹配,直接按固定长度截断前缀,导致子路径归属错误
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

