Polars rolling操作仅保留索引与分组列,如何保留全部原列?
保留Polars滚动聚合后的全部原列解决方案
问题背景
处理金融OHLC数据时,使用Polars的rolling().agg()方法生成滚动向前列表后,结果仅保留了Date、n和lists列,丢失了原DataFrame中的大部分字段,需要实现保留所有原列的需求。
解决方案
使用with_columns()方法替代直接调用rolling().agg(),将滚动聚合的结果作为新列添加到原DataFrame中,而非生成新的聚合DataFrame。
代码实现
pl.Config(fmt_str_lengths=100) # 调整输出字符串长度 out = ohlc.with_columns( lists = pl.col("Close").rolling( index_column='n', period='20i', offset='0i', group_by="Date" ).agg(pl.format("[{}]", pl.col("Close").str.join(","))) )
原理说明
rolling().agg()方法本身会返回仅包含分组键、索引列及聚合结果的DataFrame,覆盖了原数据;with_columns()方法则是在原DataFrame的基础上,新增指定的计算列,完整保留所有原有字段和数据结构,同时添加滚动聚合生成的lists列。
内容的提问来源于stack exchange,提问作者Ted Black
相关产品推荐
相关产品推荐

