polars方法备忘录

  • 反选: pl.col('*').exclude('date')

  • 聚合:df.groupby(['date','code']).agg()

  • 透视: pivot()

  • 宽格式转化为长格式:melt

  • 分组计算:with_columns([(1/pl.col('code').count()).over('date').alias('weight')

  • 展开:agg([pl.col('code'),(1 / pl.col('open').count()).alias('weight')]).explode(['order_book_id'])

  • 连接:join()

  • 空:is_not_nan() is_not_null()

  • 包含: is_in()

  • 新增列:with_columns()

  • 向上取整: ceil()

  • 转换格式:cast()

  • 计数:count()

  • 条件处理:pl.when().then().otherwise()

  • 后缀:suffix()

  • 单元格放置列表:pl.concat_list(
    [pl.col('high') - pl.col('low'),
    (pl.col('high') - pl.col('pre_close')).abs(),
    (pl.col('low') - pl.col('pre_close')).abs()]).list.max().alias('TR'),

  • groupby_rolling: data.with_columns(
    pl.col('date').cumcount().cast(pl.Int64).over('order_book_id').alias('index')
    ).groupby_rolling('index', period=f'{n}i', by='order_book_id', check_sorted = False
    ).agg([
    pl.col('date').last(),
    pl.col('close').rank().alias(f'{n}_close_rank'),
    pl.col('date').count().alias('count')
    ]).filter(pl.col('count')==n).with_columns(
    (
    (pl.col(f'{n}_close_rank').list[-1]) / n * 100

                            ).alias('factor')
                        ).select(['date', 'order_book_id', 'factor'])\
                                .rename({'order_book_id': 'code'})\
                    .sort(['date', 'code'])
    
posted @ 2025-08-05 11:21  LazyTiming  阅读(19)  评论(0)    收藏  举报