【发布时间】:2017-09-27 13:11:40
【问题描述】:
我有以下数据框
+--------------------+----------------+----------------+-----------+---+
| patient_gid|interaction_desc|interaction_date|rx_end_date|rnk|
+--------------------+----------------+----------------+-----------+---+
|00000000000072128380| prod1| 2009-02-23| 2009-05-22| 1|
|00000000000072128380| prod1| 2010-04-05| 2009-05-22| 2|
|00000000000072128380| prod1| 2009-03-23| 2009-05-22| 3|
|00000000000072128380| prod1| 2009-04-20| 2009-05-22| 4|
|00000000000072128380| prod1| 2009-05-16| 2009-05-22| 5|
|00000000000072128380| prod1| 2009-06-17| 2009-05-22| 6|
|00000000000072128380| prod1| 2009-07-15| 2009-05-22| 7|
|00000000000072128380| prod1| 2009-08-12| 2009-05-22| 8|
|00000000000072128380| prod1| 2009-09-05| 2009-05-22| 9|
|00000000000072128380| prod1| 2009-10-06| 2009-05-22| 10|
|00000000000072128380| prod2| 2009-10-28| 2009-05-22| 1|
|00000000000072128380| prod2| 2009-12-02| 2009-05-22| 2|
|00000000000072128380| prod2| 2010-05-10| 2009-05-22| 3|
|00000000000072128380| prod2| 2008-05-22| 2009-05-22| 4|
|00000000000072128380| prod2| 2010-07-06| 2009-05-22| 5|
|00000000000072128380| prod2| 2010-08-03| 2009-05-22| 6|
|00000000000072128380| prod2| 2010-09-23| 2009-05-22| 7|
|00000000000072128380| prod2| 2010-10-20| 2009-05-22| 8|
|00000000000072128380| prod2| 2010-01-29| 2009-05-22| 9|
|00000000000072128380| prod2| 2008-05-22| 2009-05-22| 10|
+--------------------+----------------+----------------+-----------+---+
用例:我想添加具有以下逻辑的新列剧集 如果排名是 1 Episode =1 。如果排名 > 1 并且产品相同并且interaction_date > rx_end_date 然后 Episode = 上一集 + 1 否则 Episode = 上一集
预期结果是
+--------------------+----------------+----------------+-----------+---+-------+
| patient_gid|interaction_desc|interaction_date|rx_end_date|rnk|episode|
+--------------------+----------------+----------------+-----------+---+-------+
|00000000000072128380| prod1| 2009-02-23| 2009-05-22| 1| 1|
|00000000000072128380| prod1| 2010-04-05| 2009-05-22| 2| 2|
|00000000000072128380| prod1| 2009-03-23| 2009-05-22| 3| 2|
|00000000000072128380| prod1| 2009-04-20| 2009-05-22| 4| 2|
|00000000000072128380| prod1| 2009-05-16| 2009-05-22| 5| 2|
|00000000000072128380| prod1| 2009-06-17| 2009-05-22| 6| 3|
|00000000000072128380| prod1| 2009-07-15| 2009-05-22| 7| 4|
|00000000000072128380| prod1| 2009-08-12| 2009-05-22| 8| 5|
|00000000000072128380| prod1| 2009-09-05| 2009-05-22| 9| 6|
|00000000000072128380| prod1| 2009-10-06| 2009-05-22| 10| 7|
|00000000000072128380| prod2| 2009-10-28| 2009-05-22| 1| 1|
|00000000000072128380| prod2| 2009-12-02| 2009-05-22| 2| 2|
|00000000000072128380| prod2| 2010-05-10| 2009-05-22| 3| 3|
|00000000000072128380| prod2| 2008-05-22| 2009-05-22| 4| 3|
|00000000000072128380| prod2| 2010-07-06| 2009-05-22| 5| 4|
|00000000000072128380| prod2| 2010-08-03| 2009-05-22| 6| 5|
|00000000000072128380| prod2| 2010-09-23| 2009-05-22| 7| 6|
|00000000000072128380| prod2| 2010-10-20| 2009-05-22| 8| 7|
|00000000000072128380| prod2| 2010-01-29| 2009-05-22| 9| 8|
|00000000000072128380| prod2| 2008-05-22| 2009-05-22| 10| 8|
+--------------------+----------------+----------------+-----------+---+-------+
我想使用 spark 窗口函数来实现上述逻辑,或者使用任何 spark 数据框函数来执行此操作?
【问题讨论】:
标签: python dataframe pyspark window-functions