python按一定的顺序删除重复项(不是“first”和“last”)

2024-09-28 01:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我知道的方法是使用drop\u duplicates,但它只给了我一个选项firstlast。我想检查一下,如果有原因2,那么用reason2保存记录,否则检查reason3等等。基本上,有特定的顺序,比如reason2、reason3、reason4等


Tags: 方法idtruedf选项dropduplicatesvalues
2条回答

根据注释,这可以是实现之一:(实现@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')

输出:

^{pr2}$

使用具有定义的顺序和排序的“category”数据类型:

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')

输出:

^{pr2}$

相关问题 更多 >

    热门问题