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

如何在Python Pandas中按70%/30%唯一ID拆分DataFrame并保留全量行

Pandas按唯一ID拆分训练集与测试集(70%/30%比例)

输入数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "id": [999, 999, 999, 185, 185, 185, 44, 44, 44],
    "target": [1, 1, 1, 0, 0, 0, 1, 1, 1],
    "event_date": ['2023-01-01', '2023-01-02', '2023-01-03', 
                   '2023-01-01', '2023-01-02', '2023-01-03', 
                   '2023-01-01', '2023-01-02', '2023-01-03'],
    "event1": [1, 6, 11, 16, np.nan, 22, 74, 109, 52],
    "event2": [2, 7, np.nan, 17, 22, np.nan, np.nan, 10, 5],
    "event3": [3, 8, 13, 18, 23, np.nan, 2, np.nan, 99],
    "event4": [4, 9, np.nan, np.nan, np.nan, 11, 8, np.nan, np.nan],
    "event5": [5, np.nan, 15, 20, 25, 1, 1, 3, np.nan]
})

# 用0填充缺失值
df = df.fillna(0)

需求

  • 训练集包含70%的唯一ID,测试集包含剩余30%的唯一ID
  • 每个ID对应的所有行必须完整保留,不能拆分单个ID的记录

解决方案

# 获取所有唯一ID
unique_ids = df['id'].unique()

# 随机打乱ID顺序(保证拆分随机性)
np.random.shuffle(unique_ids)

# 计算拆分阈值,取70%的ID作为训练集
split_point = int(len(unique_ids) * 0.7)
train_ids = unique_ids[:split_point]
test_ids = unique_ids[split_point:]

# 按ID筛选生成训练集和测试集
train_df = df[df['id'].isin(train_ids)].reset_index(drop=True)
test_df = df[df['id'].isin(test_ids)].reset_index(drop=True)

结果示例

  • 训练集(示例,包含2个ID,真实场景自动按70%比例分配):
# 训练集数据(已填充0)
train_df = pd.DataFrame({
    "id": [999, 999, 999, 185, 185, 185],
    "target": [1, 1, 1, 0, 0, 0],
    "event_date": ['2023-01-01', '2023-01-02', '2023-01-03', 
                   '2023-01-01', '2023-01-02', '2023-01-03'],
    "event1": [1, 6, 11, 16, 0, 22],
    "event2": [2, 7, 0, 17, 22, 0],
    "event3": [3, 8, 13, 18, 23, 0],
    "event4": [4, 9, 0, 0, 0, 11],
    "event5": [5, 0, 15, 20, 25, 1]
})
  • 测试集(示例,包含1个ID):
# 测试集数据(已填充0)
test_df = pd.DataFrame({
    "id": [44, 44, 44],
    "target": [1, 1, 1],
    "event_date": ['2023-01-01', '2023-01-02', '2023-01-03'],
    "event1": [74, 109, 52],
    "event2": [0, 10, 5],
    "event3": [2, 0, 99],
    "event4": [8, 0, 0],
    "event5": [1, 3, 0]
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:24:56