Pandas如何优雅实现基于列表元素匹配的DataFrame合并
实现方法
不用手写双层循环,用pandas内置的列表展开+关联操作就能快速实现,代码简洁且性能远高于逐行遍历:
# 如果df2的keywords列是字符串格式(比如"['a','b']")而非原生Python列表,先运行下面三行做格式转换 # import ast # df2['keywords'] = df2['keywords'].apply(ast.literal_eval) # 把keywords列表拆成单个关键词,每个关键词占一行 df2_exploded = df2.explode('keywords', ignore_index=True).rename(columns={'keywords': 'keyword'}) # 按keyword字段做内连接,自动匹配所有关联行 output_df = df1.merge(df2_exploded, on='keyword', how='inner')
执行后得到的结果和你给出的预期输出完全一致。
对比说明
- 原实现用
iterrows()做双层逐行遍历,pandas逐行遍历本身运行开销极高,时间复杂度为O(n*m),数据量稍大就会运行缓慢 - 上述方案用pandas内置的向量化方法,底层经过C优化,数据量越大性能优势越明显,通常比手写循环快几十到上百倍
- 后续如果需要新增保留字段,直接在原始DataFrame中维护即可,不需要修改关联逻辑
内容的提问来源于stack exchange,提问作者NineWasps
相关产品推荐
相关产品推荐

