我有两个这样的DF:
df1:
ProjectCode ProjectName
1 project1
2 project2
3 projc3
4 prj4
5 prjct5
和df2 as
VillageName
v1
proj3
pro1
prjc3
project1
我要做的是将每个ProjectName
与VillageName
进行比较,并添加匹配百分比。要计算的百分比为:
No. of matching characters/total characters * 100
乡村数据(即df2)具有超过1000万条记录,而项目数据(即df1)包含约1200条记录。
到目前为止我所做的:
import pandas as pd
df1 = pd.read_excel("C:\\Users\\Desktop\\distinctVillage.xlsx")
df = pd.read_excel("C:\\Users\\Desktop\\awcProjectMaster.xlsx")
for idx, row in df.iteritems():
for idx1, row1 in df1.iteritems():
我不知道该如何进行。如何找到子字符串并获取与每个字符串百分比匹配的第三个df。我认为这是不可行的,因为Project中的每个记录都将与Village的每个值进行匹配,从而产生巨大的结果。
是否有更好的方法来找出哪些项目名称与哪些村庄名称匹配,以及匹配程度如何?
预期输出:
ProjectName VillageName charactersMatching PercentageMatch
project1 v1 1 whateverPercent
project1 proj3 4 whateverPercent
可以根据可行性和解决方案更改期望的输出。
答案 0 :(得分:1)
以下代码假定您不关心重复的字符(因为它采用了两侧的字符集)。
percentage_match = df1['ProjectName'].apply(lambda x: df2['VillageName'].apply(lambda y: len(set(y).intersection(set(x))) / len(set(x+y))))
输出:
0 1 2 3 4
ProjectCode
1 0.111111 0.444444 0.500000 0.444444 1.000000
2 0.000000 0.444444 0.333333 0.444444 0.777778
3 0.000000 0.833333 0.428571 0.833333 0.555556
4 0.000000 0.500000 0.333333 0.500000 0.333333
5 0.000000 0.375000 0.250000 0.571429 0.555556
如果您希望每个项目的“最佳匹配”:
percentage_match.idxmax(axis = 1)
输出:
1 4
2 4
3 1
4 1
5 3