Python 如何使用列表有条件地从数据帧中删除重复项

Python 如何使用列表有条件地从数据帧中删除重复项,python,pandas,dataframe,duplicates,Python,Pandas,Dataframe,Duplicates,我有一个df,想删除ID上的所有重复项 Name Symbol ID 0 ZOO INC Remove 88579Y101 1 Zoo Inc ZZZ 88579Y101 2 A Inc AAA 90138A103 3 a inc. Remove 90138A103 4 2U Inc TWUO 90214J101 5 Keep Remove 11

我有一个
df
,想删除
ID
上的所有重复项

       Name     Symbol         ID
0   ZOO INC     Remove  88579Y101
1   Zoo Inc        ZZZ  88579Y101
2     A Inc        AAA  90138A103
3     a inc.    Remove  90138A103
4    2U Inc       TWUO  90214J101
5      Keep     Remove  111111111
但是我只想删除重复的行,其中
Symbol==“remove”
。输出应该如下所示:

       Name     Symbol         ID
0   Zoo Inc        ZZZ  88579Y101
1     A Inc        AAA  90138A103
2    2U Inc       TWUO  90214J101
3      Keep     Remove  111111111
我不能使用
result\u df=df.drop\u重复项(subset=['ID'],keep='first')
(或
keep='last'
),因为数据集没有特定的模式。而且先按字母顺序排序也没用

虽然我知道我可以用
NaN
替换所有
Remove
,然后使用提供的解决方案,但我正在寻找另一种解决方案,因为我最终可能需要传递字符串列表

Pandas是否支持以下内容:
result\u df=df.drop\u duplicates(subset=['ID'],keep=(df['Symbol']!='Remove'))

keep=False
一起使用,用于所有复制品,并通过比较链连接
移除
,通过
按位链接在一起
,通过
~
反转掩码:

m1 = df['ID'].duplicated(keep=False)
m2 = (df['Symbol'] == 'Remove')

df = df[~(m1 & m2)]

print (df)
      Name Symbol         ID
1  Zoo Inc    ZZZ  88579Y101
2    A Inc    AAA  90138A103
4   2U Inc   TWUO  90214J101
5     Keep     Remove  111111111

df[~df['Symbol'].eq('Remove')]
?但这不会删除
Symbol=='Remove
中的所有行吗?我只想删除那些在
ID
上重复的内容。我会更新这个问题,让它更清楚。这不会反映在你的样本数据上。但是再一次,耶兹雷尔的答案已经涵盖了这一点。你可能还想在你的输出中显示ID 111111(这是一个棘手的部分,但是你的技术产生了这个,所以我的投票)。