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

如何在DataFrame的同一分组内按指定概率随机删除行

Pandas 分组按概率随机删行实现方案

前置准备

如果还没构造测试数据可以用这段代码生成你给出的示例数据集,已有数据可直接跳过:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Team': ['Riders']*6 + ['Kings']*4 + ['Royals']*2,
    'Rank': [1,2,2,3,3,4,1,1,2,4,1,2],
    'Year': [2014,2015,2016,2017,2018,2019,2016,2017,2018,2019,2015,2017]
})

实现方法

你可以根据自己的需求二选一:

方案1:每组严格保留50%比例的行

用groupby+sample直接按比例采样,适合要求每组行数严格接近一半的场景:

# 加random_state参数可以固定随机结果,方便复现,不需要可以删掉
result = df.groupby('Team', group_keys=False).apply(lambda x: x.sample(frac=0.5, random_state=42))

方案2:分组内每行独立以50%概率保留

每条记录单独判断是否删除,更符合“0.5概率随机删行”的原生需求,每组最终保留行数可能有波动:

# 提前设置随机种子可以固定结果,不需要可以删掉np.random.seed这行
np.random.seed(42)
result = df[df.groupby('Team')['Team'].transform(lambda x: np.random.rand(len(x)) > 0.5)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:24:05