在 pandas 中如何使用 drop_duplicates 只有一个例外?

In pandas how to use drop_duplicates with one exception?

在 python 3 和 pandas 中,我需要通过在列中重复值来消除数据框中的重复行。为此,我使用了:

consolidado = df_processos.drop_duplicates(['numero_unico'], keep='last')

"numero_unico" 列具有字符串格式的代码,例如 0029126-45.2019.1.00.0000、0026497-98.2019.1.00.0000、0027274-83.2019.1.00.0000...

所以上面的命令只保留找到的最后一个字符串代码出现

请问有人知道如何使用 drop_duplicates 吗?

但列内容并不总是字符串代码。在几行中出现内容 "Sem número único"

而且我想保留存在此异常的所有行。但是使用上面的命令生成的数据框只保留最后一次出现 "Sem número único"

pandas drop_duplicates 中没有任何参数可以使用,但是您可以通过将 DataFrame 分成两部分(有 "Sem número único" 和没有),然后在去重后重新连接在一起。因此:

tmp_df1 = df_processos[df_processos['numero_unico']=="Sem número único"]
tmp_df2 = df_processos[df_processos['numero_unico']!='Sem número único']
tmp_df2 = tmp_df2.drop_duplicates(['numero_unico'], keep='last')
new_df = pd.concat([tmp_df1, tmp_df2])

我对 OP 的评论中的示例,

df = pandas.DataFrame({
    'a': ['snu', 'snu', '002', '002', '003', '003'], 
    'b': [1, 2, 2, 1, 5, 6]
})
df_dedupe = pandas.concat([ 
    df[df['a']=='snu'], 
    df[df['a']!='snu'].drop_duplicates(['a'], keep='last') 
])

与其他答案类似,但在一个使用 duplicated() 方法的多行命令中:

consolidado = df_processos[
    df_processos['numero_unico'] == "Sem número único" |
    ~df_processos[df_processos['numero_unico'] != "Sem número único"].duplicated(
        subset='numero_unico', keep='last'
    )
]

Link