计算日期类型列的最大值和最小值之间的天数差
Compute the difference in days between the max and the min of a date type column
我在 PySpark 中加载的 table 有一列“日期”,其中包含以下类型的数据:
Date
Open
High
Low
Close
Volume
Adj Close
1/3/2012
59.97
61.06
59.87
60.33
12668800
52.61923
1/4/2012
60.21
60.35
59.47
59.71
9593300
52.07848
1/5/2012
59.35
59.62
58.37
59.42
12768200
51.82554
1/6/2012
59.42
59.45
58.87
59
8069400
51.45922
如何计算列的最大值和最小值之间的天数差异(因此在上面的示例中,我需要 2012 年 1 月 6 日和 2012 年 1 月 3 日之间的天数差异
假设您的数据框 df
只有日期格式的列 Date
,您可以执行以下操作:
from pyspark.sql import functions as F
(df.withColumn('Max_Date', F.max(F.col('Date')))
.withColumn('Min_Date', F.min(F.col('Date')))
.withColumn('Diff_days', F.datediff(F.col('Max_Date'), F.col('Min_Date')))
.drop('Date').dropDuplicates())
在此 link 中,您可以找到有关 pyspark sql 函数的更多示例:
https://sparkbyexamples.com/spark/spark-sql-functions/
测试数据:
from pyspark.sql import functions as F
df = spark.createDataFrame([('2012-01-03',),('2013-02-03',),('2011-11-29',)], ['Date']).select(F.col('Date').cast('date'))
df.show()
# +----------+
# | Date|
# +----------+
# |2012-01-03|
# |2013-02-03|
# |2011-11-29|
# +----------+
这将创建一个包含天数差异的新数据框:
df_diff = df.groupBy().agg(F.datediff(F.max('Date'), F.min('Date')).alias('diff'))
df_diff.show()
# +----+
# |diff|
# +----+
# | 432|
# +----+
# If you need the difference in a variable:
v = df_diff.head().diff
print(v)
# 432
这将为您现有的 df 添加一个新列:
df = df.withColumn('diff', F.expr('datediff(max(Date) over(), min(Date) over())'))
df.show()
# +----------+----+
# | Date|diff|
# +----------+----+
# |2012-01-03| 432|
# |2013-02-03| 432|
# |2011-11-29| 432|
# +----------+----+
我在 PySpark 中加载的 table 有一列“日期”,其中包含以下类型的数据:
Date | Open | High | Low | Close | Volume | Adj Close |
---|---|---|---|---|---|---|
1/3/2012 | 59.97 | 61.06 | 59.87 | 60.33 | 12668800 | 52.61923 |
1/4/2012 | 60.21 | 60.35 | 59.47 | 59.71 | 9593300 | 52.07848 |
1/5/2012 | 59.35 | 59.62 | 58.37 | 59.42 | 12768200 | 51.82554 |
1/6/2012 | 59.42 | 59.45 | 58.87 | 59 | 8069400 | 51.45922 |
如何计算列的最大值和最小值之间的天数差异(因此在上面的示例中,我需要 2012 年 1 月 6 日和 2012 年 1 月 3 日之间的天数差异
假设您的数据框 df
只有日期格式的列 Date
,您可以执行以下操作:
from pyspark.sql import functions as F
(df.withColumn('Max_Date', F.max(F.col('Date')))
.withColumn('Min_Date', F.min(F.col('Date')))
.withColumn('Diff_days', F.datediff(F.col('Max_Date'), F.col('Min_Date')))
.drop('Date').dropDuplicates())
在此 link 中,您可以找到有关 pyspark sql 函数的更多示例: https://sparkbyexamples.com/spark/spark-sql-functions/
测试数据:
from pyspark.sql import functions as F
df = spark.createDataFrame([('2012-01-03',),('2013-02-03',),('2011-11-29',)], ['Date']).select(F.col('Date').cast('date'))
df.show()
# +----------+
# | Date|
# +----------+
# |2012-01-03|
# |2013-02-03|
# |2011-11-29|
# +----------+
这将创建一个包含天数差异的新数据框:
df_diff = df.groupBy().agg(F.datediff(F.max('Date'), F.min('Date')).alias('diff'))
df_diff.show()
# +----+
# |diff|
# +----+
# | 432|
# +----+
# If you need the difference in a variable:
v = df_diff.head().diff
print(v)
# 432
这将为您现有的 df 添加一个新列:
df = df.withColumn('diff', F.expr('datediff(max(Date) over(), min(Date) over())'))
df.show()
# +----------+----+
# | Date|diff|
# +----------+----+
# |2012-01-03| 432|
# |2013-02-03| 432|
# |2011-11-29| 432|
# +----------+----+