匹配DataFrame中的相似值

时间:2019-09-20 13:07:38

标签: python pandas

我具有以下形式的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 个答案:

答案 0 :(得分:1)

看看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']

答案 1 :(得分:0)

您可以实现自定义函数(可能使用其他答案中的difflib ...)将Name中的值转换为初始相似值(如果存在) ,您可以apply到列Name

最后,您可以将Name上的groupbysum一起使用:

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

替代:使用 apply 创建另一个数字列,为相似的术语使用相同的数字,然后在新列上使用 groupby