根据两个数据框中的日期和ID进行过滤:Pyspark

时间:2018-02-06 13:25:37

标签: python pyspark

我有两个数据帧: DF1:

+----------+-----------+-----------+
|        ID|Dx_Min_Date|Dx_Max_Date|
|  30794324| 2014-04-21| 2015-07-01|
|  31234323| 2013-07-04| 2017-05-02|
+----------+-----------+-----------+

DF2:

+----------+-----------+-----------+
|        ID|  Procedure|       Date|
|  30794324|         32| 2014-06-21|
|  30794324|         14| 2014-04-25|
|  30794324|         12| 2017-08-02|
|  54321367|         14| 2014-05-02|
+----------+-----------+-----------+

我想根据DF2的ID来过滤数据框DF1,并且在列Dx_Min_Date和{{1}给出的最小和最大日期之间}}。导致:

Dx_Max_Date

有没有办法根据一个数据帧的列过滤另一个?

1 个答案:

答案 0 :(得分:1)

使用非equi join:

df2.alias('tmp').join(
    df1, 
    (df2.ID == df1.ID) & 
    (df2.Date >= df1.Dx_Min_Date) & 
    (df2.Date <= df1.Dx_Max_Date)
).select('tmp.*').show()
+--------+---------+----------+
|      ID|Procedure|      Date|
+--------+---------+----------+
|30794324|       32|2014-06-21|
|30794324|       14|2014-04-25|
+--------+---------+----------+