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(这是一个棘手的部分,但是你的技术产生了这个,所以我的投票)。