使用 groupby 前向填充极坐标数据帧仅对某些列进行上采样?

问题描述 投票:0回答:1

使用 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        │
└─────────────┴──────────┴────────────┴─────┴─────┴────────────┴─────────────┘
python dataframe python-polars
1个回答
4
投票

您可以使用

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()
    )
© www.soinside.com 2019 - 2024. All rights reserved.