如何根据Polars中一列的分组方法创建新列?

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

我有一些数据结构如第一张图片所示。我喜欢重构数据框的地方。 initial data: 初始数据的一小段:

id 时间 价值
2050 02-01 20
2051 02-01 25
2050 02-02 21
2051 02-02 22
2051 02-03 23

我希望重组数据帧的方式是使用时间戳列,然后为每个 externallogid 添加一列。我已经使用 pandas 完成了此操作,但由于文件相当大,并且必须多次使用,因此由于速度原因,我想在 Polars 中完成此操作。

预期输出:

时间 2050 2051
02-01 20 25
02-02 21 22
02-03 23

我尝试过使用groupby函数,以及join/hstack/concat。但在尝试使用 Lazyframes 时似乎遇到了问题。

谢谢

生成数据:

import polars as pl

lf = pl.DataFrame({'id': [2050, 2051, 2050, 2051, 2051],
                    'time': ['2023-05-01',
                             '2023-05-01',
                             '2023-05-02',
                             '2023-05-02',
                             '2023-05-03'],
                   'value': [20, 25, 21, 22, 23]})
lf = lf.with_columns(pl.col("time").str.to_datetime("%Y-%m-%d"))
python dataframe python-polars
1个回答
2
投票

你应该

.pivot()

In [29]: lf.pivot('id', index='time')
Out[29]:
shape: (3, 3)
┌─────────────────────┬──────┬──────┐
│ time                ┆ 2050 ┆ 2051 │
│ ---                 ┆ ---  ┆ ---  │
│ datetime[μs]        ┆ i64  ┆ i64  │
╞═════════════════════╪══════╪══════╡
│ 2023-05-01 00:00:00 ┆ 20   ┆ 25   │
│ 2023-05-02 00:00:00 ┆ 21   ┆ 22   │
│ 2023-05-03 00:00:00 ┆ null ┆ 23   │
└─────────────────────┴──────┴──────┘
© www.soinside.com 2019 - 2024. All rights reserved.