为了账号安全,请及时绑定邮箱和手机立即绑定

根据来自小型 DataFrame 的信息过滤大型 DataFrame

根据来自小型 DataFrame 的信息过滤大型 DataFrame

慕码人8056858 2023-03-01 15:23:15
我有一个包含大约 10 亿行和大约 15 列的大型 DataFrame。| country|  city | date      | ...|+--------+-------+-----------+----+|  France|  Paris| 2018-07-01| ...||   Spain| Madrid| 2017-06-01| ...|我有一个较小的 DataFrame,其中包含要根据组合(国家、城市)过滤的日期 - 大约 50 行。| country|  city | filter_date |+--------+-------+-------------+|  France|  Paris| 2018-07-01  ||   Spain| Madrid| 2017-06-01  |我想使用存储在小 DataFrame 中的 filter_date 按日期过滤大 DataFrame 对于给定组合 - 例如删除包含(法国,巴黎)并且在 2018-07-01 之前的任何行,等等......我最初想到的解决方案只是进行左连接,然后进行过滤,例如:df = df_large.join(df_small, on=['country', 'city'], how='left').filter(f.col('date') >= c.col('filter_date'))但是,如果非常昂贵并且我的 DataFrame 太大,则此解决方案并不理想,因为左连接。在此操作后执行操作时,代码需要很长时间才能运行。
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

尝试left semi加入 +broadcasting较小的 df。还使用and如下组合所有过滤器 -

 df_large.join(broadcast(df_small), df_large("country") === df_small("country") &&
      df_large("city") === df_small("city") && df_large("date") >= df_small("filter_date"), "leftsemi")



查看完整回答
反对 回复 2023-03-01
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信