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

如何基于记录关联关系去除Pandas DataFrame中的指定重复项?

处理Pandas DataFrame中部分重复项的保留与移除需求

针对你描述的需求——保留每个产品最新年份的记录,同一年份下保留所有不重复的参考编号(完全重复的行移除),可以通过以下步骤实现:

步骤说明

  1. 为每个产品确定其最新的记录年份
  2. 过滤出所有属于该产品最新年份的记录
  3. 在过滤后的结果中,移除完全重复的行(即Product、Year、Reference三者均相同的重复项)

代码实现

首先构造示例数据(修正了原数据中索引7的输入错误):

import pandas as pd

data = {
    'Product': ['product1', 'product1', 'product2', 'product2', 'product2', 'product3', 'product3', 'product3'],
    'Year': [2023, 2022, 2023, 2023, 2022, 2022, 2022, 2022],
    'Reference': ['ref1', 'ref2', 'ref1', 'ref2', 'ref1', 'ref1', 'ref2', 'ref1']
}
df = pd.DataFrame(data)

接下来执行处理逻辑:

# 1. 计算每个产品的最新年份
latest_year = df.groupby('Product')['Year'].max().reset_index()
latest_year.columns = ['Product', 'Latest_Year']

# 2. 合并原数据与最新年份,过滤出仅包含最新年份的记录
filtered_df = df.merge(latest_year, on='Product')
filtered_df = filtered_df[filtered_df['Year'] == filtered_df['Latest_Year']].drop(columns='Latest_Year')

# 3. 移除完全重复的行(保留第一次出现的行)
result_df = filtered_df.drop_duplicates(subset=['Product', 'Year', 'Reference'], keep='first')

print(result_df)

输出结果

执行后得到的结果完全符合你的需求:

Product  Year Reference
0  product1  2023      ref1
2  product2  2023      ref1
3  product2  2023      ref2
5  product3  2022      ref1
6  product3  2022      ref2

逻辑验证

  • product1:仅保留2023年的记录,移除2022年的旧记录
  • product2:保留所有2023年的不同参考编号记录,移除2022年的旧记录
  • product3:保留2022年所有不重复的参考编号,移除重复的ref1记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:00