我有以下表格
df_obs.show()
项目编号 | 观察日期 |
---|---|
项目1 | 2021-09-20 2021-09-20 2021-09-20 |
项目1 | 2022-12-05 - 05 - 2022-12-05 |
项目2 | 2022-10-27 2022-10-27 |
项目1 | 2022-09-20 2022-09-20 |
项目2 | 2023-02- 20 2023-02-20 2023-02-20 |
项目2 | 2023-03- 20 2023-03-20 2023-03-20 |
项目1 | 2023-01-20 2023-01-20 2023-01-20 |
df_purchase.withColumn("rank", dense_rank().over(Window.partitionBy("ITEM_No").orderBy(asc("Date_Purchase")))).show()
项目_编号 | 日期_购买 | 秩 |
---|---|---|
项目1 | 2021-08-21 - 2021-08-21 | 1 |
项目1 | 2022-02-23 2022-02-23 2022-02-23 | 二 |
项目1 | 2022-12-29 - 2022-12-29 | 三 |
项目2 | 2022-09-20 2022-09-20 | 1 |
项目2 | 2023-01-20 2023-01-20 2023-01-20 | 二 |
我想根据df_purchase中的排名对df_obs Date_Observed列进行排名,即Date_Observed介于哪个日期范围之间
需要输出
项目编号 | 观察日期 | 秩 |
---|---|---|
项目1 | 2021-09-20 2021-09-20 2021-09-20 | 1 |
项目1 | 2022-12-05 - 05 - 2022-12-05 | 二 |
项目2 | 2022-10-27 2022-10-27 | 1 |
项目1 | 2022-09-20 2022-09-20 | 二 |
项目2 | 2023-02- 20 2023-02-20 2023-02-20 | 二 |
项目2 | 2023-03- 20 2023-03-20 2023-03-20 | 二 |
项目1 | 2023-01-15 2023-01-15 2023-01-15 | 三 |
示例:df_obs中的第2行获得排名2,因为Date_Observed(2022-12-05)在df_purchase表中的2022-02-23(排名2)和2022-12-29(排名3)之间
1条答案
按热度按时间3phpmpom1#
定义连接条件以匹配具有相同项目编号但左侧数据框中的观察日期必须大于右侧的购买日期的行,然后在此条件下连接数据框,然后使用max分组并聚合排名
结果