Соответствие аналогичным значениям в DataFrame - PullRequest
1 голос
/ 20 сентября 2019

У меня есть DataFrame в следующей форме:

Name    Count
Car     500
Cars    300
Train   100
trainz  200
Planes  1000
Plane   100 
planses 1
Ship    100
ships   10

Я пытаюсь сопоставить аналогичные значения друг с другом, чтобы число в столбце count суммировалось для сходных значений.

Следовательно, выходной кадр данных будет первым найденным значением данного типа в столбце name и суммированным значением по всем аналогичным значениям в столбце count.

Name  Count
Car    800
Train  300
Planes 1101
Ship   110

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Посмотрите на difflib .

Следующий код

import difflib
print(difflib.get_close_matches('Car', ['Car', 'Cars', 'Train', 'trainz', 'Planes', 'Plane', 'planses', 'Ship', 'ships']))
print(difflib.get_close_matches('Train', ['Car', 'Cars', 'Train', 'trainz', 'Planes', 'Plane', 'planses', 'Ship', 'ships']))
print(difflib.get_close_matches('Planes', ['Car', 'Cars', 'Train', 'trainz', 'Planes', 'Plane', 'planses', 'Ship', 'ships']))
print(difflib.get_close_matches('Ship', ['Car', 'Cars', 'Train', 'trainz', 'Planes', 'Plane', 'planses', 'Ship', 'ships']))

дает желаемые группы

['Car', 'Cars']
['Train', 'trainz']
['Planes', 'Plane', 'planses']
['Ship', 'ships']
0 голосов
/ 20 сентября 2019

Вы можете реализовать пользовательскую функцию (возможно, использовать difflib из другого ответа ...), чтобы преобразовать значения в Name в исходное аналогичное значение (если существует),и вы можете применить к столбцу Name.

Наконец, вы можете использовать groupby на Name с sum:

df.groupby('Name').agg('sum')

Альтернатива: с помощью применить , создать еще один числовой столбец с тем же номером для аналогичных терминов, затем использовать groupby в новом столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...