【发布时间】:2021-05-03 16:35:45
【问题描述】:
考虑最小的例子
customer day purchase
Joe 1 5
Joe 1 10
Joe 2 5
Joe 2 5
Joe 4 10
Joe 7 5
在 BigQuery 中,可以执行类似的操作来获取客户在过去 2 天内每天花费的金额:
SELECT customer, day
, sum(purchase) OVER (PARTITION BY customer ORDER BY day ASC RANGE between 2 preceding and 1 preceding)
FROM table
熊猫中的等价物是什么?即预期结果
customer day purchase amount_last_2d
Joe 1 5 null -- spent days [-,-]
Joe 1 10 null -- spent days [-,-]
Joe 2 5 15 -- spent days [-,1]
Joe 2 5 15 -- spent days [-,1]
Joe 4 10 10 -- spent days [2,3]
Joe 7 5 0 -- spent days [5,6]
【问题讨论】:
-
你能发布预期的输出吗?
-
我认为您应该在输入和输出中添加一个 day=3 的行,以便为可能的解决方案提供更好的单元测试。我担心您当前的示例将允许解决方案可以复制您的输出,但不能复制您想要的逻辑。
-
这是要点之一 - RANGE 函数对日期值进行操作,而不是行号(例如,前两天的总和,而不是前 2 行的总和)
-
这就是为什么你应该提供一个更完整的例子。我认为根据您当前的输入,您可以吸引似乎适用于这种情况的答案,但不适用于其他情况。这就是为什么有一个简单的示例很重要,该示例可以区分实现您所需逻辑的答案,以及那些接近但仅适用于该特定示例的答案。
-
我明白你的观点 ALollz,修改了示例,以便澄清目的。
标签: pandas google-bigquery range window-functions