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'])