首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >滚动百分位数-熊猫

滚动百分位数-熊猫
EN

Stack Overflow用户
提问于 2021-12-13 00:11:07
回答 1查看 527关注 0票数 3

这为下面的列提供了百分位数值,

代码语言:javascript
运行
复制
df[column].rank(pct=True)

但是,是否有一种方法可以通过使用类似的方法获得列的滚动百分位数值,而无需编写函数或循环以及更长的代码?目前,当添加.rolling(window)时,它无法工作。

如果没有,Pandas迫切需要为.rolling()添加这一特性,它是为.quantile()添加的,也没有必要为百分位数添加它。

EN

回答 1

Stack Overflow用户

发布于 2021-12-13 16:00:12

在等待大熊猫1.4.0增加滚动排名的同时,这样做的一种方法可能是:

代码语言:javascript
运行
复制
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的第一个值。

例子:

代码语言:javascript
运行
复制
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

这将为最后一行提供以下输出:

代码语言:javascript
运行
复制
   Scores  rank_result  rolling_apply
6       4     0.142857       0.142857
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70328739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档