我有一个随机单词和名字的数据集,我正在尝试对所有相似的单词和名字进行分组。因此,鉴于以下数据框架:
Name ID Value
0 James 1 10
1 James 2 2 142
2 Bike 3 1
3 Bicycle 4 1197
4 James Marsh 5 12
5 Ants 6 54
6 Job 7 6
7 Michael 8 80007
8 Arm 9 47
9 Mike K 10 9
10 Michael k 11 1
我的伪代码类似于:
import pandas as pd
from fuzzywuzzy import fuzz
minratio = 95
for idx1, name1 in df['Name'].iteritems():
for idx2, name2 in df['Name'].iteritems():
ratio = fuzz.WRatio(name1, name2)
if ratio > minratio:
grouped = df.groupby(['Name', 'ID'])['Value']\
.agg(Total_Value='sum', Group_Size='count')
这将为我提供所需的输出:
print(grouped)
Name ID Total_Value Group_Size
0 James 1 164 3 # All James' grouped
2 Bike 3 1198 2 # Bike's and Bicycles grouped
5 Ants 6 54 1
6 Job 7 6 1
7 Michael 8 80017 3 # Mike's and Michael's grouped
8 Arm 9 47 1
显然,这是行不通的,老实说,我甚至不确定这是否可行,但这就是我试图实现的目标。任何能让我走上正轨的建议都是有用的
使用affinity propagation clustering(不完美,但可能是一个起点):
结果
相关问题 更多 >
编程相关推荐