私はこの問題を解決するために過去 2 週間試みてきましたが、ほぼ目標に達しています。
ケース: 私がしようとしていることの全体的な描写
- この例では、2 つの異なる Excel シートから抽出された 2 つのデータフレームがあり、3x3 (DF1 と DF2) とします。
- DF1 の Column2 のセルを DF2 の Column2 と一致させたい
- セルを1つずつ一致させる必要があります
例: セル X1 があり、Y(1,2,3) X1 の各セルが Y3 と最も一致するとします。
- 行 X1 が配置されている行と行 Y3 が配置されている行を抽出し、それらを 3.Excel シートの 1 つの行に並べて保存します。
更新されたもの:
このコードは、sequencematcher と一致して一致を出力できますが、最大一致のリストではなく、1 つの出力一致しか得られません。
import pandas as pd
from difflib import SequenceMatcher
data1 = {'Fruit': ['Apple','Pear','mango','Pinapple'],
'nr1': [22000,25000,27000,35000],
'nr2': [1,2,3,4]}
data2 = {'Fruit': ['Apple','Pear','mango','Pinapple'],
'nr1': [22000,25000,27000,35000],
'nr2': [1,2,3,4]}
df1 = pd.DataFrame(data1, columns = ['Fruit', 'nr1', 'nr2'])
df2 = pd.DataFrame(data2, columns = ['nr1','Fruit', 'nr2'])
#Single out specefic columns to match
col1=(df1.iloc[:,[0]])
col2=(df2.iloc[:,[1]])
#function to match 2 values similarity
def similar(a,b):
ratio = SequenceMatcher(None, a, b).ratio()
matches = a, b
return ratio, matches
for i in col1:
print(max(similar(i,j) for j in col2))
出力: (1.0, ('フルーツ', 'フルーツ'))
すべての最大一致が得られるように修正するにはどうすればよいですか?また、一致が配置されているそれぞれの行を抽出するにはどうすればよいですか?