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

如何基于机器ID从DataFrame中提取每个ID对应30%记录生成新DataFrame

按ID分组抽取30%记录的Pandas实现方案

需求说明

现有一个包含100个ID的DataFrame,每个ID对应一台机器,每个ID下有多条关联记录,需要为每个ID提取其30%的记录,存入新的DataFrame中。
原始数据示例结构:
示例图片

实现步骤

依赖准备

确保已经安装并导入pandas库:
import pandas as pd

核心代码

假设原始DataFrame名为df,存储ID的列名为id,直接运行以下代码即可得到采样后的结果:

sampled_df = df.groupby('id', group_keys=False).apply(
    lambda x: x.sample(frac=0.3, random_state=42)
)

参数说明

  • frac=0.3:指定每个分组的采样比例为30%,如果需要按固定条数采样,可将该参数替换为n=你需要的条数
  • random_state=42:固定随机种子,保证每次运行采样结果一致,不需要复现结果可删除该参数
  • group_keys=False:避免将分组ID作为额外的索引层级加入结果表,保持和原表一致的结构

特殊场景适配

如果存在部分ID对应的总记录数较少,30%的计算结果小于1导致采样报错的情况,可使用以下兼容代码,保证每个ID最少抽取1条记录:

sampled_df = df.groupby('id', group_keys=False).apply(
    lambda x: x.sample(n=1, random_state=42) if len(x) * 0.3 < 1 
    else x.sample(frac=0.3, random_state=42)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:51:02