【问题标题】:In pandas how to use drop_duplicates with one exception?在熊猫中如何使用 drop_duplicates 有一个例外?
【发布时间】:2019-10-09 19:15:27
【问题描述】:

在 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”的最后一次出现

【问题讨论】:

  • 删除具有“Sem número único”的行,对原始 df 执行 dedup,然后将“Sem número único”行合并回

标签: python pandas dataframe exception drop-duplicates


【解决方案1】:

以我对 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') 
])

【讨论】:

  • 好东西谢谢!我一直试图让它工作很长时间
【解决方案2】:

与其他答案类似,但在一个多行命令中使用了 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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 2018-06-28
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      相关资源
      最近更新 更多