如何将Polars数据帧转换为具有一定维度的numpy数组?

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

我有一个包含 300 个盆地的 Polars DataFrame,每个盆地有 100,000 个时间记录,每个时间记录由 40 个变量组成,总共 3000 万行和 40 个变量。如何将其重建为形状为 (300, 100,000, 40) 的 NumPy 数组而不破坏相应的数据索引?

示例:

shape: (10, 7)
┌──────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ HQprecipitat ┆ IRprecipita ┆ precipitati ┆ precipitati ┆ randomError ┆ basin_id    ┆ time        │
│ ion          ┆ tion        ┆ onCal       ┆ onUncal     ┆ ---         ┆ ---         ┆ ---         │
│ ---          ┆ ---         ┆ ---         ┆ ---         ┆ f32         ┆ str         ┆ datetime[μs │
│ f32          ┆ f32         ┆ f32         ┆ f32         ┆             ┆             ┆ ]           │
╞══════════════╪═════════════╪═════════════╪═════════════╪═════════════╪═════════════╪═════════════╡
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-01  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 09:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-01  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 12:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-01  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 15:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-01  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 18:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-01  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 21:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-02  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 00:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-02  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 03:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-02  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 06:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-02  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 09:00:00    │
│ null         ┆ null        ┆ null        ┆ null        ┆ null        ┆ anhui_62909 ┆ 1980-01-02  │
│              ┆             ┆             ┆             ┆             ┆ 400         ┆ 12:00:00    │
└──────────────┴─────────────┴─────────────┴─────────────┴─────────────┴─────────────┴─────────────┘
# It should be reshaped to a numpy array which shape is (1, 10, 7)
# 1 means amount of basins, 10 means amount of times, 7 means width or amount of variables.
python python-3.x numpy python-polars
1个回答
0
投票

现在我使用 group_by 和 slice 来完成这个。

station_len = len(self.x['basin_id'].unique())
x_truncated = (self.x.group_by('basin_id', maintain_order=True).agg(pl.all().slice(0, len(self.x) // station_len)).
                       explode(pl.exclude("basin_id"))
© www.soinside.com 2019 - 2024. All rights reserved.