如何通过模糊匹配的字符串对熊猫数据帧行进行聚类



我有一个包含 ID、名称和地址的数据帧。我想通过亲和力传播或其他算法对地址进行聚类,以便在地址字符串上进行模糊匹配/分组。这部分我有:

import pandas as pd
import pyodbc
import numpy as np
from sklearn.cluster import AffinityPropagation
from pyjarowinkler import distance
from sklearn import metrics
conn = pyodbc.connect(r'DSN=<UserDSN>;')
df = pd.read_sql('select * from <InputTable>', conn)
addr = df['Addresses']
addr = np.asarray(addr)
jw = np.array([[distance.get_jaro_distance(w1,w2) for w1 in addr] for w2 in addr])
affprop = AffinityPropagation(affinity="precomputed", damping=.5)
affprop.fit(jw)
for cluster_id in np.unique(affprop.labels_):
    exemplar = addr[affprop.cluster_centers_indices_[cluster_id]]
    cluster = np.unique(addr[np.nonzero(affprop.labels_==cluster_id)])
    cluster_str = ", ".join(cluster)
    print(" - *%s:* %s" % (exemplar, cluster

现在,如何通过在数据帧中使用"群集"列来使此聚类分析有用?实质上,我想将每个集群的exemplar添加回数据帧中的相应行。我是否需要某种唯一 ID 才能执行此操作?这样做的目的是识别数据中的重复行,因此当前没有唯一 ID。但是,也许我可以以某种方式向原始数据帧添加一个,因为每一行作为一个整体都是唯一的?

谢谢大家的任何见解!

df['new_col'] = list(affprop.labels_)

最新更新