微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pyspark每3个月的平均销售量

如何解决pyspark每3个月的平均销售量

我希望每3个月在pyspark中平均销售一次。

Input 输入:

Product Date    Sales
A   01/04/2020  50
A   02/04/2020  60
A   01/05/2020  70
A   05/05/2020  80
A   10/06/2020  100
A   13/06/2020  150
A   25/07/2020  160

输出output

Product Date    Sales   3month Avg sales
A   01/04/2020   50     36.67
A   02/04/2020   60     36.67
A   01/05/2020   70    86.67
A   05/05/2020   80    86.67
A   10/06/2020  100    170
A   13/06/2020  150    170
A   25/07/2020  160    186.67

7月的平均值是(may + june + july)/3=560/3=186.67

解决方法

有时候,density_rank非常昂贵,因此我已经计算了自定义索引,并使用@Cena进行了类似的步骤。

from pyspark.sql import Window
from pyspark.sql.functions import *

w = Window.partitionBy('Product').orderBy('index').rangeBetween(-2,0)

df.withColumn('Date',to_date('Date','dd/MM/yyyy')) \
  .withColumn('index',(year('Date') - 2020) * 12 + month('Date')) \
  .withColumn('avg',sum('Sales').over(w) / 3) \
  .show()

+-------+----------+-----+-----+------------------+
|Product|      Date|Sales|index|               avg|
+-------+----------+-----+-----+------------------+
|      A|2020-04-01|   50|    4|36.666666666666664|
|      A|2020-04-02|   60|    4|36.666666666666664|
|      A|2020-05-01|   70|    5| 86.66666666666667|
|      A|2020-05-05|   80|    5| 86.66666666666667|
|      A|2020-06-10|  100|    6|             170.0|
|      A|2020-06-13|  150|    6|             170.0|
|      A|2020-07-25|  160|    7|186.66666666666666|
+-------+----------+-----+-----+------------------+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。