pandas - 在 pandas DataFrame 的滚动窗口上对数据进行排名

标签 pandas time-series rank

我是 Python 和 Pandas 库的新手,如果这是一个微不足道的问题,我深表歉意。我试图在 N 天的滚动窗口上对时间序列进行排名。我知道有一个排名函数,但这个函数对整个时间序列的数据进行排名。我似乎无法找到滚动排名函数。
这是我正在尝试做的一个例子:

           A

01-01-2013 100
02-01-2013 85
03-01-2013 110
04-01-2013 60
05-01-2013 20
06-01-2013 40

如果我想在 3 天的滚动窗口内对数据进行排名,答案应该是:
           Ranked_A

01-01-2013 NaN
02-01-2013 Nan
03-01-2013 1
04-01-2013 3
05-01-2013 3
06-01-2013 2

Python 中是否有内置函数可以执行此操作?有什么建议吗?
非常感谢。

最佳答案

如果您想使用 Pandas built-in rank method (使用一些额外的语义,例如升序选项),您可以为其创建一个简单的函数包装器

def rank(array):
    s = pd.Series(array)
    return s.rank(ascending=False)[len(s)-1]

然后可以将其用作自定义滚动窗口函数。
pd.rolling_apply(df['A'], 3, rank)

哪个输出
Date
01-01-2013   NaN
02-01-2013   NaN
03-01-2013     1
04-01-2013     3
05-01-2013     3
06-01-2013     2

(我假设 df 数据结构来自 Rutger 的回答)

关于pandas - 在 pandas DataFrame 的滚动窗口上对数据进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14440187/

相关文章:

python - Pandas GroupBy 值的频率

python - pyspark 在分组的 applyInPandas 中添加多列(更改架构)

使用 2 个向量参数翻转函数

Linux 排序 : how to sort numerically but leave empty cells to the end

python - 按单个整数对列进行排名

mysql - 与另一个表连接后对 MySQL 结果进行排名,也按条件过滤它们

python - 如何在按 pandas 数据框中的另一列分组后插入缺失的日期和前向填充列

python - 根据条件更新 Pandas 数据框的值

r - 在 R 中绘制时间序列

php - mysql php 用户带宽配额管理