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

Pandas如何删除按name、school分组的最后一条重复行并保留其余数据

解决方案

错误原因

你原来的代码存在3个问题:

  • drop_duplicates的设计逻辑是对重复的name+school组合只保留1行,不管怎么调整参数都无法实现保留分组内前N-1行的需求,本身就不适合当前场景
  • keep=last写法错误,参数值需要加引号,应为keep='last',否则会触发语法报错
  • drop_duplicates默认不会修改原DataFrame,你没有把操作后的结果赋值回变量,打印原df自然看不到变化

正确实现

用groupby对每个分组单独处理即可,逻辑非常直观:

# 按name、school分组,分组长度大于1的去掉最后一行,否则保留全部
df = df.groupby(['name', 'school'], group_keys=False).apply(lambda x: x.iloc[:-1] if len(x) > 1 else x)
print(df)

运行后输出结果和你的预期完全一致:

name school  marks
0    tom    HBS     55
1    tom    HBS     54
3   mark    HBS     28
5  lewis    HBS     88

如果你不想用lambda写法,也可以用cumcount计数实现:

group = df.groupby(['name', 'school'])
# 筛选条件:要么分组只有1行,要么不是分组内的最后一行
cond = (group.cumcount() < group['name'].transform('size') - 1) | (group['name'].transform('size') == 1)
df = df[cond]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:08