You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中按Group ID进行有放回抽样N-1样本?

在Polars中实现按组有放回Bootstrapping抽样

要实现按group_id分组的有放回抽样(每组抽取M=N-1个样本),可以利用Polars的分组聚合结合sample方法完成,步骤如下:

核心代码实现

import polars as pl

# 加载原始数据
water_data = {
    'group_id': [1,1,1,1,2,2,2,3,3,3,4,4,4,4,5,5,5],
    'obs_id_within_group': [1,2,3,4,1,2,3,1,2,3,1,2,3,4,1,2,3],
    'N': [4,4,4,4,3,3,3,3,3,3,4,4,4,4,3,3,3],
    'M': [3,3,3,3,2,2,2,2,2,2,3,3,3,3,2,2,2],
    'water_gallons': [12,23,21,11,10,10,10,23,24,25,27,30,17,12,11,14,20],
    'water_source': ['lake','lake','pond','river','lake','glacier','glacier','lake','pond','river','lake','lake','pond','river','river','lake','glacier'],
    'water_acidity': [3,4,5,1,2,4,3,2,3,3,4,6,7,8,8,3,1]
}
df = pl.DataFrame(water_data)

# 执行按组有放回抽样
df_sampled = df.group_by('group_id').agg(
    pl.all().sample(
        n=pl.col('M').first(),
        replace=True,
        shuffle=True
    ).explode()
)

print(df_sampled)

代码说明

  • 分组逻辑:通过group_by('group_id')将数据按组划分,确保每组独立处理。
  • 抽样参数:
    • pl.all().sample():对每组的所有列执行抽样操作,保留原数据的全部字段。
    • n=pl.col('M').first():取每组第一个M值作为抽样数量(因同一组内M值统一,无需额外处理)。
    • replace=True:开启有放回抽样,满足Bootstrapping的需求。
    • shuffle=True:保证抽样结果的随机性。
  • 展开结果:.explode()将抽样得到的列表型数据展开为多行,恢复标准DataFrame结构。

注意事项

如果你的场景中存在组内M值不一致的情况,需要先确保每组抽样数量统一(比如取组内M的唯一值),否则会引发抽样数量不匹配的错误。

内容的提问来源于stack exchange,提问作者user432299

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:43:24