我有两个数据帧,如下所示:
df1:
steve jobs 12344
john hancock 12344
john peter 42154
... ...
DF2:
steve jobs 2004 12344
john smith 2004 12344
joan clements 2004 12344
judy rodes 2044 12344
amber bright 2004 98999
stephanie t 2004 98999
... ...
下面的代码允许我计算df1中第一个名字的token_sort_ratio
到df2 中的所有记录(即df1中的史蒂夫作业,史蒂夫·史密斯,joan clements,judy rodes,琥珀色df2)中的明亮和斯蒂芬妮,
import pandas as pd
from fuzzywuzzy import fuzz
cols = ['name','firmID']
df1=pd.read.csv(r'fileone.txt', sep='\t', names=cols)
df1=df1.set_index('names')
cols = ['name', 'year', 'firmID']
df2=pd.read.csv(r'filetwo.txt', sep='\t', names=cols)
df2=df2.set_index('names')
for index1, rows in df1.iterrows():
for index2, rows in df2.iterrows():
ans = fuzz.token_sort_ratio(index1, index2)
print (index1, index2, ans)
然而,这需要相当多的时间,我想知道我是否可以只计算df2中与df1中的名称具有相同 firmID 的名称的分数。 (即df1中史蒂夫作业的计算,史蒂夫作业,约翰史密斯,joan clements和judy rodes df2,因为他们共享相同的firmID( 12344 ),以及df1中的john hancock史蒂夫·乔布斯,约翰·史密斯,琼·克莱门特和朱迪·罗德在df2)。
我试过了:
grouped=df1.groupby('firmID').groups
grouped2=df2.groupby('firmID').groups
for index1, rows, group in grouped.iterrows():
for index2, rows, group in grouped2.iterrow():
ans = fuzz.token_sort_ratio(index1, index2)
print (index1, index2, ans)
我得到的错误是:
AttributeError:'dict'对象没有属性'iterrows'
使用groupby
我做错了吗?任何有关这方面的帮助将非常感谢!