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

如何过滤删除DataFrame重复条目,保留各ID对应最大Number的整行数据

实现方案

pandas 提供了内置方法可以高效实现该需求,无需手动编写循环遍历,以下两种常用方案都可以保留对应最大Number的Department字段:


方案1:排序后去重(逻辑直观易理解)

先按ID升序、Number降序排序,每个ID对应的第一条数据就是Number最大的条目,随后按ID去重保留第一条即可:

# 按ID升序、Number降序排序
df_sorted = df.sort_values(by=['ID', 'Number'], ascending=[True, False])
# 按ID去重,保留每个ID的第一条数据
result = df_sorted.drop_duplicates(subset='ID', keep='first')

直接输出result即可得到期望结果。


方案2:分组取最大值索引(代码更简洁)

通过groupby按ID分组,直接定位每个分组内Number最大值对应的行索引,再根据索引取全量字段:

result = df.loc[df.groupby('ID')['Number'].idxmax()]

原代码问题说明

你编写的两层嵌套循环会将所有ID对和Number对交叉匹配,无法将同一行的ID和Number对应,自然会出现重复输出、匹配错误的问题,完全不需要手动实现遍历逻辑,内置方法已经做了性能优化,处理大数据量时效率远高于自定义循环。


完整可运行测试示例

import pandas as pd

# 构造示例数据
data = {
    'ID': [2324, 2324, 2324, 2400, 2593, 2593],
    'Department': ['Art', 'Math', 'Art', 'Science', 'Tech', 'Math'],
    'Number': [4, 1, 3, 2, 5, 1]
}
df = pd.DataFrame(data)

# 方案1执行
df_sorted = df.sort_values(by=['ID', 'Number'], ascending=[True, False])
result1 = df_sorted.drop_duplicates(subset='ID', keep='first')
print("方案1输出:")
print(result1)

# 方案2执行
result2 = df.loc[df.groupby('ID')['Number'].idxmax()]
print("\n方案2输出:")
print(result2)

运行后两种方案输出均符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:57:04