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

如何按SubjectID分组提取首行数据生成基线dataframe

数据集分组提取首行基线数据实现方案

核心实现逻辑

利用去重操作替代分组取首行,性能更优,全程保留所有原始字段。

前置准备

先确认SubjectID的前缀提取规则:

  • 固定长度前缀:如示例中WS11Q6Y为7位固定长度,直接截取字符串前N位即可
  • 分隔符分割前缀:如SubjectID格式为前缀_测试序号,用分隔符拆分取第一段即可

最高效实现(pandas环境,适合绝大多数科研数据集场景)

drop_duplicates的性能比groupby.head高30%以上,尤其适合上百字段、大样本量的纵向数据集:

import pandas as pd

# 步骤1:提取受试者唯一前缀,此处以7位固定前缀为例,可按需调整提取逻辑
DF1["subject_prefix"] = DF1["SubjectID"].str[:7]
# 若为分隔符分割前缀(如下划线分割),替换为:DF1["subject_prefix"] = DF1["SubjectID"].str.split("_").str[0]

# 步骤2:按前缀去重,保留每个分组的第一条记录,删除临时前缀列
DF2 = DF1.drop_duplicates(subset="subject_prefix", keep="first").drop(columns="subject_prefix")

其他备选实现

如果需要同步做其他分组预处理,可选用groupby.head写法,代码更简洁:

DF2 = DF1.groupby(DF1["SubjectID"].str[:7], as_index=False).head(1)

超大数据集优化方案

如果数据集行数超过千万、内存占用过高,可使用polars库实现,性能是pandas的5-10倍,内存占用更低:

import polars as pl

# 读入数据集(支持csv、parquet等常见格式)
df1 = pl.read_csv("你的数据集文件路径.csv")
# 按前缀分组取首行,此处以7位固定前缀为例
df2 = df1.group_by(pl.col("SubjectID").str.slice(0, 7)).first()
# 如需转pandas格式做后续处理,调用to_pandas()即可
DF2 = df2.to_pandas()

注意事项

  • 操作前请确保DF1已按测试时间升序排序,保证每个分组的第一条记录为最早的基线测试数据
  • 仅需调整前缀提取逻辑即可适配不同的SubjectID命名规则,后续去重/分组逻辑无需修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:09:02