Python Pandas Удаление дублирующихся строк на основе группировки - PullRequest
1 голос
/ 26 апреля 2020

У меня есть Pandas DataFrame, который содержит предложения и соответствующие им токены, такие как:

    sent_id id  token
1   1       1   my
2   1       2   name
3   1       3   is
4   1       4   John
5   1       5   .
6   2       1   John
7   2       2   is
8   2       3   a
9   2       4   good
10  2       5   man
11  2       6   .
...

Я хочу удалить дублированные предложения из этого кадра данных, то есть на основе идентификатора предложения, удалить все строки, если токены совпадают ранее. Например, если есть другое предложение с токенами "my name is John ." (с тем же порядком), я хочу удалить все строки этого предложения. Как мне этого добиться? Спасибо.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Используйте groupby и сформируйте предложение, используя значения в токене. Проверьте, дублировано ли какое-либо из этих предложений с duplicated. Используйте индекс этого результата, чтобы отфильтровать исходный фрейм данных:

dup_ix = df.groupby('sent_id')['token'].apply(' '.join).duplicated()
good_id = dup_ix[~dup_ix].index
df[df['sent_id'].isin(good_id)]
0 голосов
/ 26 апреля 2020
df['sent'] = np.array([None]*len(df))
for i in df.sent_id.unique():
    df.loc[df.sent_id==i, 'sent'] = df[df.sent_id==i].sent.apply(lambda x :' '.join(df[df.sent_id==i].token))
df = df.drop_duplicates(subset=['id', 'token', 'sent'], keep='first')
df = df.drop(['sent'], axis=1)
...