我有两个 Dataframe
DF1
| 用户标识|日期1|
| - ------|- ------|
| 1个|2023年1月1日|
| 第二章|2020年2月15日|
| 三个|二○二二年三月二日|
和DF2
| 用户标识|入组日期|退出日期|
| - ------|- ------|- ------|
| 1个|2018年6月1日|零|
| 1个|二○ ○八年一月一日|2012年1月1日|
| 第二章|2010年2月2日|2020年2月13日|
| 三个|2011年1月1日|零|
我想要以下内容
DF1
| 用户标识|日期1|标签|
| - ------|- ------|- ------|
| 1个|2023年1月1日|真的|
| 第二章|2020年1月15日|假|
| 三个|二○二二年三月二日|真的|
我尝试了以下方法,但没有效果:df1 = df1.join(df2,"用户标识","左"). withColumn("标签",F.当(F.列("日期1")〉= F.列("入口日期")& F.列("日期1")〈= F.列("存在日期")|F.列("日期1")〉= F.列("入口日期")& F.列("存在日期").为空),亮起("True")).否则(亮起("False"))
如果user_id的日期1介于entrance_date和exist_date之间,则构造标记列
3条答案
按热度按时间dwbf0jvd1#
你需要
1.将列名包含在
F.col('<colname>')
中1.简化条件语句(if-else子句)
1.使用
F.isnull()
代替is null
下面的代码未经测试,但应该可以完成
hmmo2u0o2#
这是可行的:
输入:
东风1-东风2
输出:
bnlyeluc3#
@sud的答案很好。我个人更喜欢将NULL end_date列设置为'9999-12- 31'之类的有用值,假设这意味着一个'open'结束日期。这有助于降低复杂性,特别是当需要执行多个操作时。