这为下面的列提供了百分位数值,
df[column].rank(pct=True)
但是,是否有一种方法可以通过使用类似的方法获得列的滚动百分位数值,而无需编写函数或循环以及更长的代码?目前,当添加.rolling(window)
时,它无法工作。
如果没有,Pandas迫切需要为.rolling()
添加这一特性,它是为.quantile()
添加的,也没有必要为百分位数添加它。
发布于 2021-12-13 08:00:12
在等待大熊猫1.4.0增加滚动排名的同时,这样做的一种方法可能是:
import pandas as pd
df[column].rolling(window).apply(lambda x: len(x[x <= x.iloc[-1]]) / len(x))
其中窗口是您想要滚动的window
。这应该会给出相同的结果,就像您在与当前窗口相同的数据文件上使用df[column].rank(pct=True)
一样。
lambda函数将发生在或等于最后一个值的次数除以值的总数,给出分数低于当前行的百分比。
注意:窗口大小下的值将返回NaN
。例如,window=2
的第一个值。
例子:
n = [5, 10, 9, 7, 6, 9, 4]
df = pd.DataFrame(n, columns=['Scores'])
df['rank_result'] = df['Scores'].rank(pct=True)
df['rolling_apply'] = df['Scores'].rolling(7).apply(lambda x: len(x[x <= x.iloc[-1]]) / len(x))
print(df[6:7]) # get the last row to compare
这将为最后一行提供以下输出:
Scores rank_result rolling_apply
6 4 0.142857 0.142857
https://stackoverflow.com/questions/70328739
复制相似问题