使用 Polars 进行上采样时是否可以仅 fill_forward 某些列?
例如,想要填写示例数据框中缺少的日期(请参阅下面的代码)。 “upsample”和“forward_fill”效果非常好,并且在处理更大的数据集时速度非常快。输出如下表所示。没有问题,一切都符合预期。
但是:是否可以排除前向填充的列,例如它在
utc_time
列中返回空白而不是填充时间?我尝试通过替换 pl.all() with pl.col(...)
来列出 select 语句中的列,但这只是删除了未列出的列。
import polars as pl
from datetime import datetime
df = pl.DataFrame(
{
'utc_created':pl.date_range(datetime(2021, 12, 16), datetime(2021, 12, 22, 0), interval="2d", eager=True),
'utc_time':['21:12:06','21:20:06','17:51:10','03:54:49'],
'sku':[9100000801,9100000801,9100000801,9100000801],
'old':[18,17,16,15],
'new':[17,16,15,14],
'alert_type':['Inventory','Inventory','Inventory','Inventory'],
'alert_level':['Info','Info','Info','Info']
}
)
df = (df.upsample(time_column='utc_created',every='1d', group_by='sku')
.select(pl.all().forward_fill())
)
退货:
shape: (7, 7)
┌─────────────┬──────────┬────────────┬─────┬─────┬────────────┬─────────────┐
│ utc_created ┆ utc_time ┆ sku ┆ old ┆ new ┆ alert_type ┆ alert_level │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ date ┆ str ┆ i64 ┆ i64 ┆ i64 ┆ str ┆ str │
╞═════════════╪══════════╪════════════╪═════╪═════╪════════════╪═════════════╡
│ 2021-12-16 ┆ 21:12:06 ┆ 9100000801 ┆ 18 ┆ 17 ┆ Inventory ┆ Info │
│ 2021-12-17 ┆ 21:12:06 ┆ 9100000801 ┆ 18 ┆ 17 ┆ Inventory ┆ Info │
│ 2021-12-18 ┆ 21:20:06 ┆ 9100000801 ┆ 17 ┆ 16 ┆ Inventory ┆ Info │
│ 2021-12-19 ┆ 21:20:06 ┆ 9100000801 ┆ 17 ┆ 16 ┆ Inventory ┆ Info │
│ 2021-12-20 ┆ 17:51:10 ┆ 9100000801 ┆ 16 ┆ 15 ┆ Inventory ┆ Info │
│ 2021-12-21 ┆ 17:51:10 ┆ 9100000801 ┆ 16 ┆ 15 ┆ Inventory ┆ Info │
│ 2021-12-22 ┆ 03:54:49 ┆ 9100000801 ┆ 15 ┆ 14 ┆ Inventory ┆ Info │
└─────────────┴──────────┴────────────┴─────┴─────┴────────────┴─────────────┘
您可以使用
pl.exclude(name).forward_fill()
例如
.with_columns(pl.exclude("utc_time").forward_fill())
完整的代码是:
df = df.upsample(
time_column = 'utc_created',every="1d", by =('sku'))
.with_columns(pl.exclude("utc_time")
.forward_fill()
)