如何像PySpark一样在Pandas中实现多列多条件DataFrame左连接?
在Pandas中实现PySpark的区间左连接操作
当然可以实现,核心就是模拟PySpark里左连接+多条件匹配的逻辑,具体步骤如下:
1. 先做等值左连接
基于d.p_hash和p.hash做左连接,确保保留d的所有行:
merged = d.merge(p, left_on='p_hash', right_on='hash', how='left')
2. 过滤区间匹配条件
筛选出dy落在mindy到maxdy之间的行,同时要保留左连接中没匹配到p的行(这些行的p表字段都是NaN):
filtered = merged[ ((merged['dy'] >= merged['mindy']) & (merged['dy'] <= merged['maxdy'])) | merged['hash'].isna() ]
3. 删除冗余列
把p表带来的hash、mindy、maxdy这三列删掉:
d = filtered.drop(columns=['hash', 'mindy', 'maxdy'])
完整代码
把上面的步骤整合起来就是:
# 左连接等值字段 merged = d.merge(p, left_on='p_hash', right_on='hash', how='left') # 过滤区间条件+保留未匹配行 filtered = merged[ ((merged['dy'] >= merged['mindy']) & (merged['dy'] <= merged['maxdy'])) | merged['hash'].isna() ] # 清理冗余列 d = filtered.drop(columns=['hash', 'mindy', 'maxdy'])
小提醒
- 如果两个DataFrame数据量特别大,这种方式可能会占用较多内存,这时可以考虑分块处理或者用Dask这类支持并行的库
- 要确保
dy、mindy、maxdy的数据类型一致,不然可能会出现过滤错误
内容的提问来源于stack exchange,提问作者wedrano de carvalho
相关产品推荐
相关产品推荐

