【发布时间】:2021-04-02 17:31:12
【问题描述】:
我想我的 Pandas DataFrame 如下所示:
account amount
A 10
A 10
A 20
A 10
A 10
A 10
B 10
B 10
B 20
B 18
B 18
B 12
B 14
B 18
B 19
我想要一个如下所示的新列:
account want
A nan
A nan
A 1
A 2
A 3
A 1
B nan
B nan
B 1
B 2
B 3
B 1
B 2
B 1
B 1
这个想法是在给定窗口中找到最大值之后排列顺序(从 1 开始)。
例如,给定的窗口是3,账户A,最大金额是20。然后,索引2 将返回1,因为20 是给定窗口中的最大值。之后,对于下一个滚动窗口,索引 3 将返回 2,因为金额为 10,小于上面的 20。
将逻辑应用到帐户B,结果如图所示。我可以考虑用 3 创建最大数量的滚动窗口,但我不能再做进一步了。
【问题讨论】:
-
输出中的
A 3背后的逻辑是什么?不应该是2吗? -
在索引 4 处,数量为 10,而过去 3 个窗口的最大数量为 20。然后,它从 20 排名为 3(从 1 开始)。 [20, 10, 10] = [1, 2, 3]
-
您能进一步解释一下您的滚动窗口是如何工作的吗?索引 2 的值不应该是 20,索引 3 的值不应该是 20 吗?
-
基本上,我想在滚动窗口中找到最大值之后对顺序进行排序。考虑第一个窗口 [10, 10, 20],在索引 2 处最大值为 20,值返回 1。考虑第二个窗口 [10, 20, 10] 最大值仍为 20 但索引更改为 1,金额为索引 3 为 10,而最大值为 20。然后,它将从包含 20 的索引进行排名并返回为 2
-
按照相同的逻辑,A 组的最后两个值是 3 和 1 怎么办?我了解 3,但不了解 1。
标签: python pandas dataframe conditional-statements rolling-computation