如何基于记录关联关系去除Pandas DataFrame中的指定重复项?
处理Pandas DataFrame中部分重复项的保留与移除需求
针对你描述的需求——保留每个产品最新年份的记录,同一年份下保留所有不重复的参考编号(完全重复的行移除),可以通过以下步骤实现:
步骤说明
- 为每个产品确定其最新的记录年份
- 过滤出所有属于该产品最新年份的记录
- 在过滤后的结果中,移除完全重复的行(即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
相关产品推荐
相关产品推荐

