2つのデータフレームの複数の行のファズ率を計算しようとしています。
df1:
id name
1 Ab Cd E
2 X.Y!Z
3 fgh I
df2:
name_2
abcde
xyz
df1.nameとdf2.name_2のすべての値の間のファズ比を計算したい:
それを行うために私はコードを持っています:
for i in df1['name']:
for r in df2['name_2']:
print(fuzz.ratio(i,r))
しかし、最終結果にはdf1のIDも含める必要があります。理想的には次のようになります。
final_df:
id name name_2 score
1 Ab Cd E abcde 50
1 Ab Cd E xyz 0
2 X.Y!Z abcde 0
2 X.Y!Z xyz 60
3 fgh I abcde 0
3 fgh I xyz 0
助けてくれてありがとう!
でのラムダ関数の適用を完全には理解していませんpd.apply
が、SOを検索した後、これは妥当な解決策だと思います。
import pandas as pd
from fuzzywuzzy import fuzz
d = [{'id': 1, 'name': 'Ab Cd e'}, {'id': 2, 'name': 'X.Y!Z'}, {'id': 3, 'name': 'fgh I'}]
df1 = pd.DataFrame(d)
df2 = pd.DataFrame({'name_2': ['abcde', 'xyz']})
これはパンダのクロス結合です。tmpdfが必要ですパンダは共通の列をクロス結合しません
df1['tmp'] = 1
df2['tmp'] = 1
df = pd.merge(df1, df2, on=['tmp'])
df = df.drop('tmp', axis=1)
の列に.apply
関数fuzz.ratio
を実行できますdf
。パンダ:複数の列に適用機能を使用する方法
df['fuzz_ratio'] = df.apply(lambda row: fuzz.ratio(row['name'], row['name_2']), axis = 1)
df
また、にインデックスを設定しようとdf1
しましたが、その結果、相互結合されたdfから除外されました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加