本文详解如何在 polars 中对时间序列或索引序列数据执行滚动窗口(如 4 期)的百分位排名计算,解决 `group_by_dynamic` 排序异常与除零错误,并推荐更稳定、语义清晰的 `rolling()` 方案。
在金融或时序分析中,常需基于滑动窗口(例如最近 252 个交易日 × 3 = 756 天,或简化为 4 期)计算某资产价格相对于窗口内其他值的相对位置——即滚动百分位排名(percentile rank)。Polars 提供了高性能的窗口操作能力,但正确使用需注意排序状态、窗口边界语义及空值/长度不足场景的处理。
group_by_dynamic 要求索引列全局严格单调递增且无重复,且 every="1i"(逐单位滚动)在日期列上易因精度或缺失导致“未显式排序”报错;而 rolling() 专为滑动窗口设计,语义更直观、容错更强,且天然支持 closed="left" 等边界控制。
以下以整数索引为例(实际中可替换为 date 列,但需确保其为 pl.Date 或 pl.Datetime 并已排序):
import polars as pl
prices = pl.DataFrame({
"int_index": range(6),
"asset_1": [1.1, 3.4, 2.6, 4.8, 7.4, 3.2],
"asset_2": [4, 7, 8, 3, 4, 5],
"asset_3": [1, 3, 10, 20, 2, 4],
})
# 定义待计算列(排除索引列)
rank_cols = pl.all().exclude("int_index")
# 执行滚动窗口百分位计算:窗口大小为 4,左闭右开(包含当前行及后续3行)
percentiles = (
prices.sort("int_index") # 确保索引有序(必要!)
.rolling(
index_column="int_index",
period="4i", # 窗口跨度:4 个单位
offset="0i", # 不偏移,从当前索引开始
closed="left" # 包含左端点(当前行),不包含右端点(第 i+4 行)
)
.agg(
(rank_cols.rank(method="min").first() * 100.0 / rank_cols.count())
.name.suffix("_percentile")
)
)
print(percentiles)输出结果:
shape: (6, 4) ┌───────────┬────────────────────┬────────────────────┬────────────────────┐ │ int_index ┆ asset_1_percentile ┆ asset_2_percentile ┆ asset_3_percentile │ │ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ f64 ┆ f64 │ ╞═══════════╪════════════════════╪════════════════════╪════════════════════╡ │ 0 ┆ 25.0 ┆ 50.0 ┆ 25.0 │ │ 1 ┆ 50.0 ┆ 75.0 ┆ 50.0 │ │ 2 ┆ 25.0 ┆ 100.0 ┆ 75.0 │ │ 3 ┆ 66.666667 ┆ 33.333333 ┆ 100.0 │ │ 4 ┆ 100.0 ┆ 50.0 ┆ 50.0 │ │ 5 ┆ 100.0 ┆ 100.0 ┆ 100.0 │ └───────────┴────────────────────┴────────────────────┴────────────────────┘
? 验证逻辑: 第 0 行窗口为 [1.1, 3.4, 2.6, 4.8] → 1.1 排名第 1(最小),百分位 = (1 / 4) × 100 = 25% 第 1 行窗口为 [3.4, 2.6, 4.8, 7.4] → 3.4 排名第 2 → (2 / 4) × 100 = 50%
通过以上方法,你可高效、准确地在 Polars 中实现任意数值
列的滚动百分位排名,无缝对接量化策略回测、异常检测等生产场景。
# 大数据
# 金融
# pandas
# sort
# date
# 循环
# 也不
# 排名第
# 适用于
# 你可
# 为例
# 报错
# 相对于
# 更强
# 专为
# 高性能
相关文章:
建站之星展会模板:智能建站与自助搭建高效解决方案
常州自助建站工具推荐:低成本搭建与模板选择技巧
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何制作算命网站,怎么注册算命网站?
如何登录建站主机?访问步骤全解析
如何通过商城自助建站源码实现零基础高效建站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
零基础网站服务器架设实战:轻量应用与域名解析配置指南
网站制作免费,什么网站能看正片电影?
家具网站制作软件,家具厂怎么跑业务?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
制作农业网站的软件,比较好的农业网站推荐一下?
建站主机是否属于云主机类型?
如何制作一个表白网站视频,关于勇敢表白的小标题?
C#如何使用XPathNavigator高效查询XML
如何通过商城免费建站系统源码自定义网站主题?
如何挑选优质建站一级代理提升网站排名?
无锡营销型网站制作公司,无锡网选车牌流程?
建站之星ASP如何实现CMS高效搭建与安全管理?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星各版本价格是多少?
制作网页的网站有哪些,电脑上怎么做网页?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
定制建站如何定义?其核心优势是什么?
太原网站制作公司有哪些,网约车营运证查询官网?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何在云虚拟主机上快速搭建个人网站?
建站ABC备案流程中有哪些关键注意事项?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何快速打造个性化非模板自助建站?
代刷网站制作软件,别人代刷火车票靠谱吗?
如何快速生成专业多端适配建站电话?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何在万网主机上快速搭建网站?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
实例解析angularjs的filter过滤器
婚礼视频制作网站,学习*后期制作的网站有哪些?
nginx修改上传文件大小限制的方法
宿州网站制作公司兴策,安徽省低保查询网站?
教程网站设计制作软件,怎么创建自己的一个网站?
如何通过.red域名打造高辨识度品牌网站?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
大同网页,大同瑞慈医院官网?
建站之星如何优化SEO以实现高效排名?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
香港服务器如何优化才能显著提升网站加载速度?
如何在阿里云香港服务器快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。