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

基于PySpark从大DataFrame生成与小DataFrame变量比例一致的2倍样本集

按指定比例从大DataFrame抽取匹配样本的解决方案

核心思路

要实现符合要求的抽样,关键是先确定每个variable类别的目标抽取量,再从大DataFramedf中按该数量精准抽取:

  • 目标量计算:df1中每个variable的记录数 × 2(因为样本规模是df1的2倍)
  • 抽样逻辑:对每个variable类别,从df的对应子集中抽取指定数量的样本,确保类别占比与df1完全一致

代码实现

import pandas as pd

# 计算每个variable需要抽取的样本数(df1对应数量的2倍)
target_sample_counts = df1['variable'].value_counts() * 2

# 逐个抽取每个类别的样本并收集
collected_samples = []
for var_name, required_count in target_sample_counts.items():
    # 筛选df中当前variable的所有记录
    var_records = df[df['variable'] == var_name]
    
    # 检查可用记录是否满足需求,避免报错
    if len(var_records) < required_count:
        print(f"注意:variable '{var_name}' 在df中仅存在 {len(var_records)} 条记录,无法满足抽取 {required_count} 条的要求,将抽取全部可用记录")
        collected_samples.append(var_records)
    else:
        # 抽取指定数量样本,random_state保证结果可复现
        sampled_records = var_records.sample(n=required_count, random_state=42)
        collected_samples.append(sampled_records)

# 合并所有样本得到最终数据集
final_sample_df = pd.concat(collected_samples, ignore_index=True)

验证方法

执行完抽样后,可以通过以下代码验证结果是否符合要求:

# 检查样本总规模是否为df1的2倍
print(f"样本总规模:{len(final_sample_df)},df1规模的2倍:{len(df1)*2}")

# 检查各variable的占比是否与df1一致
print("\n样本中各variable占比:")
print(final_sample_df['variable'].value_counts(normalize=True))
print("\ndf1中各variable占比:")
print(df1['variable'].value_counts(normalize=True))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:37:26