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

基于分组的Bootstrap重采样实现(针对pandas DataFrame)

基于group_id的Bootstrap重采样实现方法

核心思路

先提取所有唯一的group_id,对这些分组ID做有放回抽样,再将每个抽中的分组对应的所有行取出,拼接成重采样后的DataFrame。

代码实现

1. 构造示例数据

先还原你提供的示例DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'class': [1, 1, 1, 0, 0],
    'group_id': [1, 1, 1, 2, 2]
})

2. 分步实现重采样

# 1. 获取所有唯一分组ID
unique_groups = df['group_id'].unique()

# 2. 对分组ID进行有放回抽样(抽样数量与原唯一分组数一致)
sampled_groups = np.random.choice(unique_groups, size=len(unique_groups), replace=True)

# 3. 拼接抽中分组的所有行
resampled_df = pd.concat([df[df['group_id'] == g] for g in sampled_groups], ignore_index=True)

3. 封装为可复用函数

如果需要多次执行重采样,可以封装成函数:

def bootstrap_resample_by_group(df, group_col):
    unique_groups = df[group_col].unique()
    # 可自定义抽样数量,比如size=2*len(unique_groups)生成更大的数据集
    sampled_groups = np.random.choice(unique_groups, size=len(unique_groups), replace=True)
    return pd.concat([df[df[group_col] == g] for g in sampled_groups], ignore_index=True)

# 调用函数
resampled_df = bootstrap_resample_by_group(df, 'group_id')

注意事项

  • 每次运行结果会有差异,因为是随机抽样;如需固定结果,可在代码开头设置随机种子:np.random.seed(42)
  • 可通过修改np.random.choice的size参数调整重采样后的数据集大小,比如设置为原分组数的2倍,会生成包含重复分组的更大DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:20:01