Polars中map_groups接收数据顺序及滚动回归的技术问询
关于Polars滚动窗口map_groups的排序问题解答
针对你提供的代码:
rolled = ( joined.sort("thing", "date") .rolling("date", period="20d", group_by="thing") .map_groups(func, None) )
问题1:map_groups是否按顺序接收DataFrame?
是的。这里的map_groups接收的是每个滚动窗口对应的子数据集,由于你提前对整个joined按thing和date做了全局排序,每个滚动窗口的子数据集会继承这个排序逻辑——同一thing分组内的窗口数据,行顺序始终和全局排序后的date升序保持一致。
问题2:上述代码中的func是否会接收按date排序的数据?
肯定会。全局sort("thing", "date")已经确保了:
- 先按
thing分组聚合 - 每个
thing组内的行严格按date从小到大排列
后续的rolling窗口基于这个已排序的数据集生成,所以每个传入func的窗口子DataFrame,内部行的date必然是升序状态。这正好满足你识别窗口最后一个date的需求——直接通过df["date"].iloc[-1]就能获取当前窗口的最后日期。
额外提示:如果需要进一步强化窗口内的排序稳定性,可以在rolling参数中添加by="date",不过基于你已有的全局排序操作,这一步并非必须。
内容的提问来源于stack exchange,提问作者burk
相关产品推荐
相关产品推荐

