假设我有一个包含杂志订阅信息的数据框:
subscription_id user_id created_at expiration_date
12384 1 2018-08-10 2018-12-10
83294 1 2018-06-03 2018-10-03
98234 1 2018-04-08 2018-08-08
24903 2 2018-05-08 2018-07-08
32843 2 2018-03-25 2018-05-25
09283 2 2018-04-07 2018-06-07
现在我想添加一个列,说明在当前订阅开始之前用户有多少以前的订阅已过期。换句话说,与给定用户相关联的到期日期在此订阅的开始日期之前。这是完整的所需输出:
subscription_id user_id created_at expiration_date previous_expired
12384 1 2018-08-10 2018-12-10 1
83294 1 2018-06-03 2018-10-03 0
98234 1 2018-04-08 2018-08-08 0
24903 2 2018-05-08 2018-07-08 2
32843 2 2018-03-25 2018-05-03 1
09283 2 2018-01-25 2018-02-25 0
尝试:
编辑:使用 Python 尝试了各种滞后/领先/等,我现在认为这是一个 SQL 问题
df = df.withColumn('shiftlag', func.lag(df.expires_at).over(Window.partitionBy('user_id').orderBy('created_at')))
<--- 编辑,编辑:没关系,这行不通
我想我用尽了滞后/领先/转移方法,发现它不起作用。我现在认为最好使用 Spark SQL 来做到这一点,也许使用 acase when来生成新列,结合 a having count,按 ID 分组?
神不在的星期二
相关分类