2016-05-20 29 views
0

私は非常にPythonに新しいです。テキストデータフレームのリストをテキストデータフレームのリストにも一致させる方法があれば、私は尋ねたいと思いますか?私は、このデータ持っ例えばPython Pandasはデータフレームを別のデータフレームに一致させますか?

を(私は、この誤って頼めば親切にこの質問を編集してください):多分findallまたはmatchまたはそのので、任意のPythonライブラリを使用して、私は見つけることができる方法はあり

df1 = 
      id Names 
     0 123 Simpson J. 
     1 456 Snoop Dogg 

df2 = 
      Names 
     0 John Simpson 
     1 Snoop Dogg 
     2 S. Dogg 
     3 Mr Dogg 

をI

result = 
       id Names_appeared 
      0 123 1 
      1 456 3 

簡単な説明をし、いくつかのURLは、私はそれに多くを見て助けるかもしれない:idの名前はそのほとんどこの結果のように登場した回数を作り出すことができます。前もって感謝します。

+0

あなたは説明できます 'あなたはいくつかの種類をやっているように見えるとして' Names'が互いに一致しているかについて説明していませんでしたresult' '' df2'の 'Names' colの任意の単語の中で、' 'df1''の任意の単語に一致するかどうかを調べます。 – EdChum

+0

@EdChum「df1」のSnoop Doggと「df2」のS. Doggとの一致率が80%近く、70%以上のマッチがあると、氏。"スヌープドッグのdf1と70%一致するドッグと一緒に残されます –

+0

もう一度70/80%のマッチを決めるのは何ですか?ジャカード類似性?文字%一致、レベンシュタイン距離?あなたはよりよく説明する必要があります – EdChum

答えて

1

はここでIANSとしてfuzzywuzzyを使った例を示唆します:

import pandas as pd 
from fuzzywuzzy import fuzz 


def fuzz_count(shortList, longList, minScore): 
    """ Count fuzz ratios greater than or equal to a minimum score. """ 
    results = [] 
    for s in shortList: 
     scores = [fuzz.ratio(s, l) for l in longList] 
     count = sum(x >= minScore for x in scores) 
     results.append(count) 
    return results 


data1 = {'id': pd.Series([123, 456]), 
     'Names': pd.Series(['Simpson J.', 'Snoop Dogg'])} 
data2 = {'Names': pd.Series(['John Simpson', 'Snoop Dogg', 'S. Dogg', 'Mr Dogg'])} 
df1 = pd.DataFrame(data1) 
df2 = pd.DataFrame(data2) 

result = pd.DataFrame() 
result['id'] = df1['id'] 
counts = fuzz_count(df1['Names'], df2['Names'], minScore=60) # [1, 2] 
result['Names_appeared'] = counts 

print(result) #  id Names_appeared 
       # 0 123    1 
       # 1 456    2 
関連する問題