Как я могу удалить повторяющуюся строку отправки формы в Python с помощью Pandas? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть набор данных отправленных форм - и некоторые из форм были отправлены несколько раз.

Один и тот же человек, тот же выбор в форме, но немного разные submission_ids и даты отправки.

Я хочу удалить одно из представлений (я скажу второе, но это не имеет значения, потому что они идентичны). Если я сделаю:

lit_subset[lit_subset.duplicated()]

Я либо не получаю то, что хочу (потому что идентификаторы submission_ids уникальны), либо если я установлю столбцы (удалите submission_id и submission_date), то я смогу увидеть, какие записи дублируются вверх, но я не знаю, как получить один из идентификаторов submission_id и удалить его из исходного набора данных. Для меня это несложно сделать на SQL сервере:

select first_name
    ,last_name
    ,email
    ,telephone
    ,accountNumber
    ,refund_option
    ,max(submission_id) as 'max_submission'
from #refund_form_data
group by first_name
    ,last_name
    ,email
    ,telephone
    ,accountNumber
    ,refund_option
having count(*) > 1

Вот пример набора данных:

import pandas as pd

data = {'submission_id':  ['abc456', 'abc123','def456','ghi789'],
        'first_name': ['Mark', 'Mark','Andrew','Allie'],
        'last_name': ['Baseball', 'Baseball','football','hockey'],
        'choice': ['Athletics', 'Athletics','Falcons','Canucks'],
        }

df = pd.DataFrame (data, columns = ['submission_id', 'first_name','last_name','choice'])

print(df)

Мне нужен результат, который выглядит следующим образом:

  submission_id first_name last_name     choice
0        abc123       Mark  Baseball  Athletics
1        def456     Andrew  football    Falcons
2        ghi789      Allie    hockey    Canucks

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Используя метод drop_duplicates, вы можете выбрать, какие столбцы рассматривать, используя аргумент subset:

df.drop_duplicates(subset=['first_name', 'last_name', 'choice'], inplace=True) 
0 голосов
/ 06 мая 2020

В вашем примере вы можете сделать что-то вроде:

_df = df.groupby(['first_name','last_name','choice'],as_index=False)['submission_id'].head(1)

df = df.merge(_df,how='inner')

Или сделайте это, если хотите max:

df = df.groupby(['first_name','last_name','choice'],as_index=False)['submission_id'].max()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...