PySpark 中每一行的列差异百分比

时间:2021-01-02 11:01:25

标签: apache-spark pyspark apache-spark-sql

我正在尝试计算数据框中每一行的列的百分比差异。这是我的数据集:

Dataset sample

例如,对于第一行,我试图获得 2016 年与 2015 年相比、2017 年与 2016 年相比的变化率......只应删除 2015 年和 2019 年,以便它们在第 5 列结束。

我知道窗口和延迟可以帮助实现它,但直到现在我都没有成功。

1 个答案:

答案 0 :(得分:1)

不需要窗口函数。如果我正确理解了问题,您只需要通过对列进行算术运算来计算变化百分比。

import pyspark.sql.functions as F

df2 = df.select(
    'city', 'postal_code',
    *[((F.col(str(year)) - F.col(str(year-1))) / F.col(str(year-1))).alias('percent_change_%s'%year)
      for year in [2016,2017,2018,2019]]
)

我也不明白为什么你最后想要 5 列。不是6吗?为什么删除了 2019?例如,您可以通过 (2019-2018)/2018 计算百分比变化。

相关问题