【发布时间】:2019-02-15 19:39:23
【问题描述】:
我有一些这样的记录。
A B
1 2018-12-25
2 2019-01-15
1 2019-01-20
3 2018-01-01
2 2019-01-01
4 2018-04-09
3 2018-11-08
1 2018-03-20
我想要得到的是这样的东西。 第一步,在组内按升序排列。 (不需要A下单)
A B
1 2018-03-20
1 2018-12-25
1 2019-01-20
3 2018-01-01
3 2018-11-08
2 2019-01-01
2 2019-01-15
4 2018-04-09
第二步,获取组内连续行之间的时间差。
A B C
1 2018-03-20 NaN
1 2018-12-25 280
1 2019-01-20 26
3 2018-01-01 NaN
3 2018-11-08 311
2 2019-01-01 NaN
2 2019-01-15 14
4 2018-04-09 NaN
第三步,得到窗口大小为 2 的 C 的移动平均值。(因为我只提供了很少的行作为例子,为了方便,就选择大小 2)
A B C moving_avg
1 2018-03-20 NaN NaN
1 2018-12-25 280 280
1 2019-01-20 26 153
3 2018-01-01 NaN NaN
3 2018-11-08 311 311
2 2019-01-01 NaN NaN
2 2019-01-15 14 14
4 2018-04-09 NaN NaN
如果 Windows 函数可以处理这种情况,该解决方案实际上不需要生成 C 列。我列出每个步骤只是为了确保您可以清楚地了解问题所在。
结果集如下所示
A B moving_avg
1 2018-03-20 NaN
1 2018-12-25 280
1 2019-01-20 153
3 2018-01-01 NaN
3 2018-11-08 311
2 2019-01-01 NaN
2 2019-01-15 14
4 2018-04-09 NaN
注意:这是在 pyspark 上并使用数据框。不在 Python 上使用 Pandas。
非常感谢!
【问题讨论】:
标签: python pyspark moving-average