В пандах, как использовать drop_duplicates с одним исключением? - PullRequest
1 голос
/ 09 октября 2019

В питоне 3 и пандах мне нужно исключить повторяющиеся строки из кадра данных, повторяя значения в столбце. Для этого я использовал:

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

В столбце "Numberro_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»

Ответы [ 3 ]

2 голосов
/ 09 октября 2019

Аналогично другим ответам, но в одной многострочной команде с использованием метода 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'
    )
]

Ссылка

1 голос
/ 09 октября 2019

Пример из моего комментария к ОП,

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') 
])
1 голос
/ 09 октября 2019

В пандах нет параметра 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])
...