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

R语言如何按id重复条件将dataframe拆分为两个无重复id的数据框

实现方案

直接用pandas内置的分组累计计数功能就能实现,不需要写复杂循环:核心逻辑是给同一个id下的所有行按出现顺序编上组内序号,再按序号拆分即可,最终拆分出的每个DataFrame都不会存在重复id。

具体代码

# 为每个id对应的记录标注组内出现次序,计数从0开始
df["group_seq"] = df.groupby("id").cumcount()

# 拆分得到两个结果,拆分后删除辅助列、重置索引
df_part1 = df[df["group_seq"] == 0].drop(columns="group_seq").reset_index(drop=True)
df_part2 = df[df["group_seq"] == 1].drop(columns="group_seq").reset_index(drop=True)

效果说明

  • df_part1会保留每个id第一次出现的记录,对应示例里的Joe(id0123)、Susan(id0333)两条数据
  • df_part2会保留每个id第二次出现的记录,对应示例里的Molly(id0333)、Kyle(id0123)两条数据
  • 如果存在同一个id出现超过2次的情况,只要继续按group_seq等于2、3……的规则筛选,就能拆出更多无重复id的DataFrame,适配性很强
  • 如果部分id只出现1次,这类记录只会被分到df_part1中,不会触发报错

对应参考结构

你提供的源DataFrame结构如下:

____________________
| id   |  name | age |
|____________________|
| 0123 | Joe   | 20  |            
|____________________|
| 0123 | Kyle  | 45  |              
|____________________|
| 0333 | Susan | 24  |            
|____________________|
| 0333 | Molly | 80  |              
|____________________|

运行代码后得到的拆分结果和预期完全一致:
第一个拆分结果df_part1:

____________________
| id   |  name | age |
|____________________|
| 0123 | Joe   | 20  |            
|____________________|
| 0333 | Susan | 24  |              
|____________________|

第二个拆分结果df_part2:

____________________
| id   |  name | age |
|____________________|
| 0333 | Molly | 80  |            
|____________________|
| 0123 | Kyle  | 45  |              
|____________________|

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:12:25