簡體   English   中英

python按一定順序刪除重復項(不是“ first”,“ last”)

[英]python drop duplicates by certain order (not `first`, `last`)

ID  values
111 reason1
111 reason2
111 reason3
222 reason2
222 reason4
222 reason5

df.drop_duplicates(["ID"], keep='???', inplace=True)

我知道的方式是使用drop_duplicates,但它只給我firstlast選項。 我想檢查是否有reason2,然后將記錄與reason2一起保存,否則檢查原因3,等等。基本上,有特定的順序,例如原因2,原因3,原因4等。

根據評論,這可以是實現之一:(實現@brittenb的想法。)

priority_dict = {
    'reason1':1,
    'reason2':2,
    'reason3':3,
    'reason4':4,
    'reason5':5
}
df['priority'] = df['values'].map(priority_dict)
df = df.sort_values(by=['ID', 'priority'])
df.drop_duplicates(['ID'], keep='first')

輸出:

     ID values  priority
0   111 reason1 1
3   222 reason2 2

使用'category'dtype定義順序和排序:

df['values'] = df['values'].astype('category', ordered=True)\
                           .cat.reorder_categories(['reason2',
                                                    'reason3',
                                                    'reason1',
                                                    'reason4',
                                                    'reason5'])

df.sort_values('values').drop_duplicates('ID', keep='first')

輸出:

    ID   values
1  111  reason2
3  222  reason2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM