Pandas中GroupBy后随机选取指定数量分组的实现方法
随机选取指定数量分组的实现方法
没问题,针对你已经按col1和col2分组的DataFrame,这里有两种实用的方法来随机选取3个分组并提取对应的数据:
方法一:手动筛选分组后合并
这种方法适合需要先查看选中分组名称的场景:
import pandas as pd import numpy as np # 你的分组对象 g = df.groupby(['col1', 'col2']) # 获取所有分组的键(即(col1, col2)的组合) all_groups = list(g.groups.keys()) # 随机挑选3个不重复的分组 selected = np.random.choice(all_groups, size=3, replace=False) # 把选中的分组数据拼接起来 result = pd.concat([g.get_group(group) for group in selected]) # 输出结果 print(result)
方法二:使用GroupBy的sample方法(更简洁)
Pandas的GroupBy对象自带sample方法,可以直接指定要选取的分组数量:
# 直接从分组对象中随机选3个分组,replace=False确保不重复选取 result = g.sample(n=3, replace=False) # 如果需要固定随机种子(方便复现结果),可以加上random_state参数 # result = g.sample(n=3, replace=False, random_state=42)
注意事项
- 如果你的总分组数量不足3个,上述代码会抛出错误,建议提前做个判断:
total_groups = len(g) if total_groups >= 3: result = g.sample(n=3, replace=False) else: print(f"当前仅存在{total_groups}个分组,无法选取3个")
内容的提问来源于stack exchange,提问作者Hana
相关产品推荐
相关产品推荐

