我有一个包含 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.
现在我使用 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"))