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

带放回随机抽样:递增样本量并求和追加至DataFrame

解决方案

核心步骤

要实现带放回抽样、逐次递增样本量并生成汇总结果,需完成以下操作:

  • 初始化空容器存储每次抽样的汇总数据
  • 循环遍历从1到指定N的样本量
  • 抽样时开启带放回模式(replace=True)
  • 对抽样结果做id拼接、数值求和及明细格式化
  • 将每次的汇总结果整合到最终DataFrame中

完整代码示例

先构造示例中的原始DataFrame:

import pandas as pd

# 原始数据集
df = pd.DataFrame({
    'id': ['a', 'b', 'c', 'd'],
    'value_1': [5, 10, 6, 9],
    'value_2': [10, 30, 8, 12]
})

# 指定最大样本量N(示例用3,可改为200)
N = 3
result_df = pd.DataFrame(columns=['id\'s', 'sum_of_value_1', 'sum_of_value_2'])

for n in range(1, N+1):
    # 带放回抽样
    sampled = df.sample(n, replace=True)
    # 拼接id字符串
    ids_str = ','.join(sampled['id'])
    # 计算value_1的总和并生成带明细的字符串
    sum_v1 = sampled['value_1'].sum()
    v1_detail = f"{sum_v1} ({'+'.join(map(str, sampled['value_1']))})"
    # 计算value_2的总和并生成带明细的字符串
    sum_v2 = sampled['value_2'].sum()
    v2_detail = f"{sum_v2} ({'+'.join(map(str, sampled['value_2']))})"
    # 将当前抽样的汇总结果追加到结果表
    result_df.loc[len(result_df)] = [ids_str, v1_detail, v2_detail]

print(result_df)

关键细节说明

  1. 带放回抽样:必须添加replace=True参数,否则默认是无放回抽样,不符合需求
  2. 结果追加优化:如果N较大(比如200),直接循环追加DataFrame会有性能损耗,建议改用列表暂存数据,最后一次性转成DataFrame:
# 大N场景优化版本
data_list = []
for n in range(1, 201):
    sampled = df.sample(n, replace=True)
    ids_str = ','.join(sampled['id'])
    sum_v1 = sampled['value_1'].sum()
    v1_detail = f"{sum_v1} ({'+'.join(map(str, sampled['value_1']))})"
    sum_v2 = sampled['value_2'].sum()
    v2_detail = f"{sum_v2} ({'+'.join(map(str, sampled['value_2']))})"
    data_list.append([ids_str, v1_detail, v2_detail])

result_df = pd.DataFrame(data_list, columns=['id\'s', 'sum_of_value_1', 'sum_of_value_2'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:10:28