我有一个带有两个日期列和几个其他列的pyspark数据框。
+-------+-----------+----------+----------+--
| ID| date1| date2 | othercols|
| 1 | 2019-04-01|2019-05-01| 345 |
| 2 | 2019-05-01|2019-06-01| 334 |
| 3 | 2019-06-01|2019-05-01| 324 |
我想将这两个日期列合并为一个新列,以使每个条目的行都重复。 我还想使用将日期添加到新列的条件,例如date1 <=给定日期&date2 <=给定日期等等。 结果数据框应如下所示:
+-------+----------+----------+----------+----------+--
| ID| date1| date2| all_dates| othercols|
| 1 |2019-04-01|2019-05-01|2019-04-01| 345 |
| 1 |2019-04-01|2019-05-01|2019-05-01| 345 |
| 2 |2019-05-01|2019-06-01|2019-05-01| 334 |
| 2 |2019-05-01|2019-06-01|2019-06-01| 334 |
| 3 |2019-06-01|2019-05-01|2019-06-01| 324 |
| 3 |2019-06-01|2019-05-01|2019-05-01| 324 |
特定ID的基本上所有日期,而其他列的信息则保持不变。
从我的search堆栈溢出中,我可以找到有关将列组合到新列并在新列中创建数组或列表的答案。在union上进行的任何搜索都会导致不同数据框的并集等。
如果有人能在这里帮助我,我将非常感激。
答案 0 :(得分:0)
创建一个新列并将其爆炸到新行中:
import pyspark.sql.functions as F
df = df.withColumn("date_array", F.array(df.date1, df.date2)).withColumn("all_dates", F.explode("date_array"))