【发布时间】:2018-10-09 20:15:47
【问题描述】:
我有两个数据框, 表 1:用户在第 0 天购买的商品 表 2:x 天内的商品价格(每天波动)
我想匹配用户购买商品的价格。有没有更好的方法来做到这一点而不循环每一行然后应用一个函数?
我的最终输出是我想知道 john 在 1/1 购买苹果时的 rolling_average 3 天平均值是多少?
第一个表: 约翰的桌子(可能会有更多用户)
Date Item Price
1/1/2018 Apple 1
2/14/2018 Grapes 1.99
1/25/2018 Pineapple 1.5
5/25/2018 Apple 0.98
参考表:价格表
Date Item Price
1/1/2018 Apple 1
1/2/2018 Apple 0.98
1/3/2018 Apple 0.88
1/4/2018 Apple 1.2
1/5/2018 Apple 1.3
1/6/2018 Apple 1.5
1/7/2018 Apple 1.05
1/8/2018 Apple 1.025
2/10/2018 Grapes 3.10
2/11/2018 Grapes 0.10
2/12/2018 Grapes 5.00
2/13/2018 Grapes 0.40
2/14/2018 Grapes 1.00
2/15/2018 Grapes 2.70
2/16/2018 Grapes 0.40
2/17/2018 Grapes 0.40
1/23/2018 Pineapple 0.50
1/24/2018 Pineapple 0.60
1/25/2018 Pineapple 0.70
1/26/2018 Pineapple 0.60
1/27/2018 Pineapple 0.60
1/28/2018 Pineapple 0.50
1/29/2018 Pineapple 0.70
1/30/2018 Pineapple 0.50
5/21/2018 Apple 7.00
5/22/2018 Apple 6.00
5/23/2018 Apple 5.00
5/24/2018 Apple 6.00
5/25/2018 Apple 5.00
苹果的例子:
Date Item Price
1/1/2018 Apple 1 #bought on this date
1/2/2018 Apple 0.98 #so next 3 days
1/3/2018 Apple 0.88 0.953333333
1/4/2018 Apple 1.2 1.02
1/5/2018 Apple 1.3 1.126666667
1/6/2018 Apple 1.5 1.333333333
1/7/2018 Apple 1.05 1.283333333
1/8/2018 Apple 1.025 1.191666667
df_price.withColumn('rolling_Average', f.avg("Price").over(Window.partitionBy(f.window("Date", "3 days"))))
【问题讨论】:
-
看来您正在计算 3 天滚动平均值并将其设置为新列?你对 John 的最终期望输出是什么?您想如何处理
Apple从 5 月开始再次出现的事实? -
@rahlf23 我想也许将它存储在一个新的临时表中,以便可以在不同的日期再次显示苹果。