[英]How to Conditionally Remove Duplicates from Pandas DataFrame with a List
我有一個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'
),因為數據集沒有特定的模式。 首先按字母順序排序也無濟於事。
雖然我知道我可以用NaN
替換所有Remove
,然后使用此處提供的解決方案,但我正在尋找替代解決方案,因為我最終可能需要傳遞一個字符串列表。
Pandas 是否支持以下內容: result_df = df.drop_duplicates(subset=['ID'], keep=(df['Symbol'] != 'Remove'))
?
將Series.duplicated
與keep=False
用於所有欺騙,將鏈與 compare 用於Remove
,通過|
鏈接在一起對於按位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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.