我有一个数据帧:
df = pd.DataFrame({'names': ['Mohit', 'Mimansa', 'Viseshini', 'Manoj', 'Manojj', 'Mohith', 'Mimi', 'Visesheni']})
df
names
0 Mohit
1 Mimansa
2 Viseshini
3 Manoj
4 Manojj
5 Mohith
6 Mimi
7 Visesheni
我试图将每个字符串与其他列中的其余字符串进行比较
我有一个函数partial_ratio,它接受两个字符串并返回相似百分比:
^{pr2}$我想要的是字符串匹配至少为80%的行的索引。在
我试过了:
ratios = []
for row in df['names']:
vals = df['names'].apply(lambda x: fuzz.partial_ratio(x, row))
ratios.append(np.where(vals>80))
ratios
[(array([0, 5], dtype=int64),),
(array([1], dtype=int64),),
(array([2, 7], dtype=int64),),
(array([3, 4], dtype=int64),),
(array([3, 4], dtype=int64),),
(array([0, 5], dtype=int64),),
(array([6], dtype=int64),),
(array([2, 7], dtype=int64),)]
有两个问题:
1)我使用for循环,因此对于更大的数据集,操作非常缓慢。使用一个序列的apply函数将每个字符串相互比较,然后返回另一个序列。使用np.where
检索至少80%匹配的索引。在
2)在应用字符串时也使用字符串本身。。在
有没有熊猫的功能/方法或更好的方法来实现这一点:
names matches
0 Mohit [5]
1 Mimansa []
2 Viseshini [7]
3 Manoj [4]
4 Manojj [3]
5 Moht Motwani [0]
6 Mimi []
7 Visesheni [2]
您可以从list comprehension转换为}创建:
numpy array
循环和列出,因此可能的筛选器如果使用numpy.where
筛选出相同的索引,则索引由{使用下面的代码块,所以只需为您想要的输出做一堆东西,它可能不可读,但仍然可以按预期工作,一堆
apply
和一些时髦的代码:-):输出:
^{pr2}$解释:
创建一个
apply
语句以按预期获取索引生成一个
groupby
以获取值的计数,每个值都将被计数,直到该值存在的行然后进行一系列更新
'matches'
列,并消除重复问题相关问题 更多 >
编程相关推荐