Pandas DataFrame - 匹配组内的行

时间:2017-10-17 16:30:44

标签: pandas dataframe iteration pandas-groupby

我有两个数据帧,如下所示:

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我做错了吗?任何有关这方面的帮助将非常感谢!

0 个答案:

没有答案