首页 > 解决方案 > 根据条件从数据框中删除行

问题描述

我有以下数据框:

df = pd.DataFrame({"Code": ['9958S135K108MF-1','9958S135-1','9958S105-1','9958S105K84MF-1',], "ID": ['FO995877000581098', 'FO995877000581098','FO995877000581098','FO995877000581098',], "NUM": ['9958S135','9958S135','9958S105','9958S105']})

我需要以下输出:

    Code                ID                  NUM
0   9958S135K108MF-1    FO995877000581098   9958S135
3   9958S105K84MF-1     FO995877000581098   9958S105

对于每一个都"ID"应该有一个独特的"NUM"。会有很多重复"ID"

诀窍是删除具有重复 '"ID"' 和 "'NUM" 的行时,我需要删除前缀以 . 结尾的行MF-1

我试图添加一"Mapping"列并删除True该列中的值,但它并不总是分配给包含“MF-1”"True"的正确行。"Code"

这是我尝试过的:

import pandas as pd

df['Mapping'] = df['NUM'].eq(df['NUM'].shift()) & df['ID'].eq(df['ID'].shift())

    Code                ID                  NUM         Mapping
0   9958S135K108MF-1    FO995877000581098   9958S135    False
1   9958S135-1          FO995877000581098   9958S135    True
2   9958S105-1          FO995877000581098   9958S105    False
3   9958S105K84MF-1     FO995877000581098   9958S105    True

标签: pythonpandas

解决方案


我能够使用以下方法实现我的结果:

df[~df.duplicated(['ID', 'NUM'], keep=False) | df['Code'].astype(str).str.contains('MF-1')]

推荐阅读