首页 > 解决方案 > 如何使用列表有条件地从 Pandas DataFrame 中删除重复项

问题描述

我有一个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_df = df.drop_duplicates(subset=['ID'], keep='first')(或keep='last'),因为数据集没有特定的模式。并且首先按字母顺序排序也无济于事。

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

Pandas 是否支持以下内容:result_df = df.drop_duplicates(subset=['ID'], keep=(df['Symbol'] != 'Remove'))

标签: pythonpandasdataframeduplicates

解决方案


Series.duplicatedwithkeep=False表示所有的欺骗,用链法比较Remove,链式用|for 按位OR,用 反转掩码~

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

推荐阅读