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

如何随机抽取Pandas DataFrame的50%行并满足指定列比例要求?

解决方案

要实现这个带比例要求的分层随机抽样需求,你可以按以下步骤操作:

步骤1:明确抽样目标

  • 原DataFrame共10行,50%的样本量为 5行
  • 要求选中的行中,C=True占90%、C=False占10%,结合原数据中C=False仅有3行的情况,我们取整为抽取4行C=True、1行C=False

步骤2:拆分数据子集

先按C的取值将原DataFrame拆分为两个独立子集:

# 拆分出C为True和False的子集
df_true = df[df["C"] == True]
df_false = df[df["C"] == False]

步骤3:计算各子集抽样数量

# 计算总抽样行数
total_sample = int(len(df) * 0.5)
# 计算C=True子集的抽样数(90%总样本量)
sample_true = int(total_sample * 0.9)
# 计算C=False子集的抽样数(剩余数量)
sample_false = total_sample - sample_true

# 额外校验:避免抽样数超过子集本身的行数
sample_true = min(sample_true, len(df_true))
sample_false = min(sample_false, len(df_false))

步骤4:抽样并合并结果

使用sample()方法完成随机抽样,最后合并并打乱结果顺序:

# 对两个子集分别随机抽样,random_state可选,用于固定抽样结果
sampled_true = df_true.sample(n=sample_true, random_state=42)
sampled_false = df_false.sample(n=sample_false, random_state=42)

# 合并抽样结果并打乱行顺序
final_sample = pd.concat([sampled_true, sampled_false]).sample(frac=1, random_state=42)

验证抽样结果

可以用以下代码确认结果是否符合要求:

print("最终样本行数:", len(final_sample))
print("C=True占比:", (final_sample["C"] == True).mean())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:20:34