过去两周我一直在尝试解决这个问题,我几乎达到了目标。
案例: 我正在尝试的整体描述
- 对于这个例子,我从 2 个不同的 excel 表中提取了 2 个数据框让我们说 3x3(DF1 和 DF2)
- 我想将 DF1 中的 Column2 中的单元格与 DF2 中的 Column2 匹配
- 我需要一一匹配单元格
示例:假设我有单元格 X1,我匹配 Y(1,2,3) X1 中的每个单元格与 Y3 最匹配。
- 我想提取 X1 行所在的行和 Y3 行所在的行,并将它们彼此对齐保存在一行中,可能在 3. excel 表中
更新我有什么:
此代码能够与 sequencematcher 匹配并打印匹配,但是我只得到一个输出匹配而不是最大匹配列表:
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, ('Fruit', 'Fruit'))
我该如何解决,以便它会给我所有的最大匹配项,以及如何提取匹配项所在的相应行?