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

如何基于Package.ID和WeekID去重并保留Version最大值的行?

解决多列重复时保留指定列最大值行的问题

这问题我熟!处理这种按Package.ID和WeekID双列去重、同时保留每组Version最大值行的需求,用Pandas有两种高效且直观的方法,完全适配你的30万行数据量:

方法一:排序后去重(直观易懂)

核心思路是先让每组内的行按Version降序排列,这样每组里Version最大的行会排在最前面,再删除双列重复的行时保留第一个即可:

import pandas as pd

# 假设你的DataFrame名为df
# 按Package.ID、WeekID升序,Version降序排序
df_sorted = df.sort_values(
    by=['Package.ID', 'WeekID', 'Version'],
    ascending=[True, True, False]
)

# 删除Package.ID和WeekID重复的行,保留第一个(即Version最大的行)
df_result = df_sorted.drop_duplicates(
    subset=['Package.ID', 'WeekID'],
    keep='first'
)

# 可选:重置索引,让结果更整洁
df_result = df_result.reset_index(drop=True)

方法二:分组取最大索引(内存友好)

如果你的数据量特别大,这种方法在内存使用上会更高效——先通过分组找到每组Version最大值对应的行索引,再直接提取这些行:

# 获取每组(Package.ID + WeekID)中Version最大的行的索引
max_version_indices = df.groupby(['Package.ID', 'WeekID'])['Version'].idxmax()

# 根据索引提取目标行
df_result = df.loc[max_version_indices].reset_index(drop=True)

效果验证

针对你给出的示例数据,两种方法都会得到你期望的结果:

  • 对于Package.ID=2803789且WeekID=201605的分组,会保留Version=4.2的Brad行;
  • 其他无重复双列的行都会完整保留。

注意事项

  • 确保Version列是数值类型(int/float),否则无法正确比较大小;
  • 如果同一分组内有多个行的Version值相同且都是最大值,两种方法都会保留该组中最先出现的那一行,符合常规需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:54