You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何像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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:17:26