如何为DataFrame各列生成1000次Bootstrap样本并替换原列值?
实现方案
要实现对DataFrame每列进行1000次Bootstrap有放回采样,最终生成1000行的新DataFrame,可以用Python的pandas和numpy库完成,具体步骤如下:
代码实现
import pandas as pd import numpy as np # 构造原始DataFrame original_df = pd.DataFrame({ '列1': [1., 4., 7., 1.], '列2': [3., 5., 1., 9.] }) # 定义Bootstrap采样函数:对单列生成n个有放回样本 def bootstrap_sample(column, n=1000): return np.random.choice(column, size=n, replace=True) # 对每一列应用采样函数,生成新的DataFrame bootstrapped_df = pd.DataFrame({ col: bootstrap_sample(original_df[col]) for col in original_df.columns }) # 验证结果(可选) print(bootstrapped_df.shape) # 输出 (1000, 2) print(bootstrapped_df.head())
代码说明
np.random.choice(column, size=1000, replace=True):核心逻辑是用numpy的随机选择函数,replace=True开启有放回采样,完全匹配Bootstrap采样要求,从原列中抽取1000个样本。- 通过字典推导式遍历原DataFrame的所有列,对每列执行采样后组合成新的DataFrame,直接得到1000行的目标结果。
如果需要保留原数据的全部行,再补充采样值至1000行(比如保留原4行,额外采样996个样本补充),可以调整采样逻辑:
def bootstrap_sample_with_original(column, n=1000): # 保留原数据,计算需要补充的样本数量并采样 remaining = n - len(column) sampled = np.random.choice(column, size=remaining, replace=True) return np.concatenate([column.values, sampled]) bootstrapped_df = pd.DataFrame({ col: bootstrap_sample_with_original(original_df[col]) for col in original_df.columns })
内容的提问来源于stack exchange,提问作者thisisnotalbit
相关产品推荐
相关产品推荐

