python - 如何根据部分匹配删除重复项
问题描述
我什至不知道如何处理它,因为它对我的水平来说太复杂了。
想象一下快递单号,我从上游系统收到一些重复的更新,格式如下:
请参阅附件图像或创建此类表的一小段代码:
import pandas as pd
incoming_df = pd.DataFrame({
'Tracking ID' : ['4845','24345', '8436474', '457453', '24345-S2'],
'Previous' : ['Paris', 'Lille', 'Paris', 'Marseille', 'Dijon'],
'Current' : ['Nantes', 'Dijon', 'Dijon', 'Marseille', 'Lyon'],
'Next' : ['Lyone', 'Lyon', 'Lyon', 'Rennes', 'NICE']
})
incoming_df
显然,跟踪 ID 24345-S2(绿色箭头)是 24345(红色箭头)的重复,但是,它不是完全重复的,而是包裹的更新的、更新的位置信息(带有历史记录)。如何删除旧行 24345 并在数据集中保留新行 24345-S2?
跟踪 ID 的长度可以是 4 到 20 个字符,但总是会附加“-S2”。谢谢!
解决方案
编辑:新解决方案:
# extract duplicates
duplicates = df['Tracking ID'].str.extract('(.+)-S2').dropna()
# remove older entry if necessary
df = df[~df['Tracking ID'].isin(duplicates[0].unique())]
如果 DataFrame 中的 1234-S2 条目始终低于 1234 条目,则可以执行以下操作:
# remove the suffix from all entries
incoming_df['Tracking ID'] = incoming_df['Tracking ID'].apply(lambda x: x.split('-')[0])
# keep only the last entry of the duplicates
incoming_df = incoming_df.drop_duplicates(subset='Tracking ID', keep='last')
推荐阅读
- oracle - Oracle 将 CSV 行中的所有值选择为自定义类型
- reactjs - 有没有办法从 Ant Design 3.x 版中拖动 Modal 组件?
- amazon-web-services - 将 AWS Glue 环境中的 PysparkML 模型保存到 S3 存储桶中
- python - 为什么我的 Jupyter notebook 显示两条蟒蛇?
- android - 未收到 Firebase 通知
- css - 字体在 Safari/iOS 上出现超薄
- javascript - JavaScript:编写一个编辑范围内字符串的函数
- sql - 在 SELECT 中使用变量作为数据库名称的 SQL 函数
- python - 如何使用相同的功能填写我的模式框?
- javascript - 从异步存储中获取 initialRouteName 时出现问题