【发布时间】:2020-01-28 08:46:34
【问题描述】:
我有一个按月计算的数据集,每个月有 N 个帐户。有些月份会有新账户,有些账户会在某个月后消失(这是随机完成的)。
我需要获取一个帐户的当月余额并从上个月的余额中扣除(如果该帐户在上个月存在),否则将其作为当月的余额。
有人建议我每个月加入一次。即加入第 1 个月到第 2 个月,第 2 个月到第 3 个月,等等。但我不完全确定会怎样......
这是一个示例数据集:
|date |account |balance |
----------------------------------
|01.01.2019|1 |40 |
|01.01.2019|2 |33 |
|01.01.2019|3 |31 |
|01.02.2019|1 |32 |
|01.02.2019|2 |56 |
|01.02.2019|4 |89 |
|01.03.2019|2 |12 |
|01.03.2019|4 |35 |
|01.03.2019|5 |76 |
|01.03.2019|6 |47 |
----------------------------------
每个已离开、当前和新加入的帐户的帐户 ID 都是唯一的。
我最初使用f.lag,但是现在有帐户消失并新加入,每个月的帐户数量不是恒定的,所以我不能滞后。正如我所说,我被建议使用加入。 IE。加入一月到二月,二月到三月等。
但我不确定那会怎样。有人有什么想法吗?
附:我创建了此表,其中包含一个保留帐户、一个新帐户和一个从以后几个月中删除的帐户的示例。
最终目标是:
|date |account |balance | balance_diff_with_previous_month |
--------------------------------------------------------------------|
|01.01.2019|1 |40 |na |
|01.01.2019|2 |33 |na |
|01.01.2019|3 |31 |na |
|01.02.2019|1 |32 |-8 |
|01.02.2019|2 |56 |23 |
|01.02.2019|4 |89 |89 |
|01.03.2019|2 |12 |-44 |
|01.03.2019|4 |35 |-54 |
|01.03.2019|5 |76 |76 |
|01.03.2019|6 |47 |47 |
--------------------------------------------------------------------|
正如我所说,f.lag 不能使用,因为每月的帐户数不是恒定的,并且我不控制帐户数,因此不能 f.lag 恒定的行数。
有人对如何使用 date-1(上个月)加入帐户和/或日期(当前月份)有任何想法吗?
感谢阅读和帮助:)
【问题讨论】:
-
你能解释一下你的输出值吗,我不明白你是如何计算账户 2 的日期 01.03.2019 的余额差异,在你的情况下是 -20,你能解释一下公式吗?对于帐户 4,应该 -54 而不是 -44 (35 - 89)
-
我更正了数字。道歉。我的快速数学很糟糕。
标签: python pyspark apache-spark-sql pyspark-sql pyspark-dataframes