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

Fra*_*kDR 5 time-series rank pandas

我是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
Run Code Online (Sandbox Code Playgroud)

如果我想在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
Run Code Online (Sandbox Code Playgroud)

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

met*_*mit 7

如果你想使用 Pandas内置的 rank 方法(带有一些额外的语义,比如升序选项),你可以为它创建一个简单的函数包装器

def rank(array):
    s = pd.Series(array)
    return s.rank(ascending=False)[len(s)-1]
Run Code Online (Sandbox Code Playgroud)

然后可以将其用作自定义滚动窗口函数。

pd.rolling_apply(df['A'], 3, rank)
Run Code Online (Sandbox Code Playgroud)

哪个输出

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
Run Code Online (Sandbox Code Playgroud)

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