在 Polar 中按组重新采样

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

我正在尝试为 Polars 中的数据构建蒙特卡罗模拟器。 我试图按列进行分组,对组进行重新采样,然后将聚合列表按原始顺序解压。 直到最后一步我都已经解决了,但我陷入了困境,并开始认为我以错误的方式解决了这个问题。

df_original = pl.DataFrame({
   'colA': ['A','A','B','B','C','C'],
   'colB': [11,12,13,14,15,16],
   'colC': [21,22,23,24,25,26]})
shape: (6, 3)
┌──────┬──────┬──────┐
│ colA ┆ colB ┆ colC │
│ ---  ┆ ---  ┆ ---  │
│ str  ┆ i64  ┆ i64  │
╞══════╪══════╪══════╡
│ A    ┆ 11   ┆ 21   │
│ A    ┆ 12   ┆ 22   │
│ B    ┆ 13   ┆ 23   │
│ B    ┆ 14   ┆ 24   │
│ C    ┆ 15   ┆ 25   │
│ C    ┆ 16   ┆ 26   │
└──────┴──────┴──────┘

我正在像这样分组和重新采样。 请注意,我在这里使用种子,因此这个示例是可重现的,但是这会运行很多次,最终没有种子。

df_resampled = (
   df_original
      .group_by('colA', maintain_order=True)
      .agg(pl.all())
      .sample(fraction=1.0, shuffle=True, seed=9)
)
shape: (3, 3)
┌──────┬───────────┬───────────┐
│ colA ┆ colB      ┆ colC      │
│ ---  ┆ ---       ┆ ---       │
│ str  ┆ list[i64] ┆ list[i64] │
╞══════╪═══════════╪═══════════╡
│ B    ┆ [13, 14]  ┆ [23, 24]  │
│ C    ┆ [15, 16]  ┆ [25, 26]  │
│ A    ┆ [11, 12]  ┆ [21, 22]  │
└──────┴───────────┴───────────┘

我不知道如何分解列表并最终得到这个。 每个组的原始顺序将被保留。 每次运行时只有组本身会重新洗牌。

shape: (6, 3)
┌──────┬──────┬──────┐
│ colA ┆ colB ┆ colC │
│ ---  ┆ ---  ┆ ---  │
│ str  ┆ i64  ┆ i64  │
╞══════╪══════╪══════╡
│ B    ┆ 13   ┆ 23   │
│ B    ┆ 14   ┆ 24   │
│ C    ┆ 15   ┆ 25   │
│ C    ┆ 16   ┆ 26   │
│ A    ┆ 11   ┆ 21   │
│ A    ┆ 12   ┆ 22   │
└──────┴──────┴──────┘
python dataframe group-by python-polars
1个回答
0
投票

正如@jqurious 在评论中指出的那样,这很容易解决...

df_resampled.explode(pl.exclude("colA"))
© www.soinside.com 2019 - 2024. All rights reserved.