Polars中如何为按多列排序的DataFrame设置set_sorted属性?
在Polars中处理多列排序的面板数据
1. 让Polars识别DataFrame按多列排序
你可以直接给set_sorted方法传入列名列表,告知Polars整个DataFrame是按id和date两列排序的:
import polars as pl # 假设df是已排序的面板数据 df = df.set_sorted(["id", "date"])
设置后,Polars会在后续操作(如窗口计算、分组聚合)中利用这个排序信息,优化查询性能。
2. 判断多列是否单调递增
Polars没有直接对应Pandas中Index.is_monotonic_increasing的多列属性,但可以通过两种方式实现类似判断:
方式一:结构体整体判断
将id和date打包成结构体,再调用is_monotonic_increasing(),该方法会按结构体的字典序逐行比较:
is_sorted = pl.struct(["id", "date"]).is_monotonic_increasing().item()
返回的布尔值表示整个DataFrame的id-date组合是否整体单调递增。
方式二:分层次验证面板数据排序
对于面板数据,通常需要验证id整体递增,且每个id分组内的date也递增,这种方式更贴合面板数据的排序逻辑:
is_sorted = ( (pl.col("id").is_monotonic_increasing()) & (pl.col("date").is_monotonic_increasing().over("id")) ).all().item()
先判断id列的单调性,再通过over("id")判断每个分组内date的单调性,最后用.all()确保所有行都满足条件。
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

