如何在Python中对DataFrame两组数据分别抽取50%和100%样本?
问题分析与解决
原代码的核心问题是判断条件逻辑错误:'group' == 1是将列名字符串与数字1做比较,结果永远为False,导致所有组都执行了同一抽样逻辑,无法实现"一组抽50%、另一组全保留"的需求。
修正后的代码
假设你需要对group列取值为1的组抽取50%数据,另一组保留全部数据,修正后的代码如下:
# 可选:打乱原数据顺序(不需要的话可删除这一行) df1 = df1.sample(frac=1).reset_index(drop=True) # 按group分组,根据组标识执行对应抽样逻辑 grouped = df1.groupby('group', as_index=False) newgroups = grouped.apply(lambda x: x.sample(frac=0.5) if x['group'].iloc[0] == 1 else x).reset_index(drop=True)
关键说明
x['group'].iloc[0]用于获取当前分组的组标识(同一组内的group值完全一致),以此判断该组应采用的抽样比例。- 若需要调整目标分组(比如对
group为0的组抽50%),只需修改判断条件中的数值即可。 reset_index(drop=True)用于清除分组后产生的多级索引,避免干扰后续数据操作。
内容的提问来源于stack exchange,提问作者jw32022
相关产品推荐
相关产品推荐

