为了账号安全,请及时绑定邮箱和手机立即绑定

Python如何通过特定的列和额外的行循环序列匹配数据帧

Python如何通过特定的列和额外的行循环序列匹配数据帧

扬帆大鱼 2022-12-20 16:26:18
在过去的两周里,我一直在尝试解决这个问题,而且我快要达到目标了。案例: 我正在尝试的总体描述对于这个例子,我从 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 pdfrom difflib import SequenceMatcherdata1 = {'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 matchcol1=(df1.iloc[:,[0]])col2=(df2.iloc[:,[1]])#function to match 2 values similaritydef similar(a,b):    ratio = SequenceMatcher(None, a, b).ratio()    matches = a, b    return ratio, matchesfor i in col1:    print(max(similar(i,j) for j in col2))输出:(1.0,('水果','水果'))我该如何修复以便它会给我所有最大匹配项以及如何提取匹配项所在的相应行?
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

这应该工作:


import pandas as pd

import numpy as np

from difflib import SequenceMatcher



def similar(a, b):

    ratio = SequenceMatcher(None, a, b).ratio()

    return ratio



data1 = {'Fruit': ['Apple', 'Pear', 'mango', 'Pinapple'],

         'nr1': [22000, 25000, 27000, 35000],

         'nr2': [1, 2, 3, 4]}


data2 = {'Fruit': ['Apple', 'mango', 'peer', 'Pinapple'],

         'nr1': [22000, 25000, 27000, 35000],

         'nr2': [1, 2, 3, 4]}


df1 = pd.DataFrame(data1)

df2 = pd.DataFrame(data2)


order = []

for index, row in df1.iterrows():

    maxima = [similar(row['Fruit'], j) for j in df2['Fruit']]

    best_ratio = max(maxima)

    best_row = np.argmax(maxima)


    order.append(best_row)


df2 = df2.iloc[order].reset_index()


pd.concat([df1, df2], axis=1)


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 58 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信