Я хотел бы объединить df2
в df1
, если title
из df1
содержит китайские символы в proj
из df2
.
df1:
id title price
0 1 大芬村茂业城花园大厦 1436584.80
1 2 旭景佳园二期A栋 3277218.34
2 3 阳光天地家园 3704190.14
3 4 创业路北南海城中心A栋12房 9730423.34
4 5 满园 4696509.11
5 6 天健世纪花园A栋1号房产 13307647.60
6 7 桃源盛景园A栋 3347066.45
7 8 南园路西侧金海岸大厦C座 1993030.20
8 9 华新村西区D栋78房 4143736.08
9 10 坂田村天景山庄西区S栋23房 1054589.74
10 11 东门中路旺业豪苑旺业阁123房 1460930.52
df2:
proj_id proj
0 2810171299 茂业城
1 2810004754 吉信大厦
2 2810648028 绿景花园
3 2810004576 鸿翔花园
4 2810070218 佳园
5 2810604862 南海城中心
6 2810004512 融湖中心城
7 2810062622 天健世纪花园
8 2810023458 天景山庄
9 2810635990 旺业豪苑
10 2810286990 金海岸
11 2810068683 华新村
Я пробовал с кодом из здесь с нечетким соответствием метод, он работает как-то, но если title
имеет очень длинные символы, некоторые proj
не будут сопоставлены. Поэтому мне интересно, есть ли другой метод для точного соответствия.
def fuzzy_merge(df_1, df_2, key1, key2, threshold=90, limit=5):
s = df_2[key2].tolist()
m = df_1[key1].apply(lambda x: process.extract(x, s, limit=limit))
df_1['matches'] = m
m2 = df_1['matches'].apply(lambda x: ', '.join([i[0] for i in x if i[1] >= threshold]))
df_1['matches'] = m2
return df_1
df = fuzzy_merge(df1, df2, 'title', 'proj', threshold = 90)
print(df)
Затем объедините df
и df2
, он странным образом генерирует столбец key_0
:
data = pd.merge(df, df2, left_on=df['matches'], right_on=df2['proj'], how ='left')
print(data)
Ouput:
key_0 id title price matches proj_id proj
0 茂业城 1 大芬村茂业城花园大厦 1436584.80 茂业城 2.810171e+09 茂业城
1 佳园 2 旭景佳园二期A栋 3277218.34 佳园 2.810070e+09 佳园
2 3 阳光天地家园 3704190.14 NaN NaN
3 南海城中心 4 创业路北南海城中心A栋12房 9730423.34 南海城中心 2.810605e+09 南海城中心
4 5 满园 4696509.11 NaN NaN
5 天健世纪花园 6 天健世纪花园A栋1号房产 13307647.60 天健世纪花园 2.810063e+09 天健世纪花园
6 7 桃源盛景园A栋 3347066.45 NaN NaN
7 金海岸 8 南园路西侧金海岸大厦C座 1993030.20 金海岸 2.810287e+09 金海岸
8 华新村 9 华新村西区D栋78房 4143736.08 华新村 2.810069e+09 华新村
9 天景山庄 10 坂田村天景山庄西区S栋23房 1054589.74 天景山庄 2.810023e+09 天景山庄
10 旺业豪苑 11 东门中路旺业豪苑旺业阁123房 1460930.52 旺业豪苑 2.810636e+09 旺业豪苑
Ожидаемый вывод будет выглядеть так:
id title price proj
0 1 大芬村茂业城花园大厦 1436584.80 茂业城
1 2 旭景佳园二期A栋 3277218.34 佳园
2 3 阳光天地家园 3704190.14 NaN
3 4 创业路北南海城中心A栋12房 9730423.34 南海城中心
4 5 满园 4696509.11 NaN
5 6 天健世纪花园A栋1号房产 13307647.60 天健世纪花园
6 7 桃源盛景园A栋 3347066.45 NaN
7 8 南园路西侧金海岸大厦C座 1993030.20 金海岸
8 9 华新村西区D栋78房 4143736.08 华新村
9 10 坂田村天景山庄西区S栋23房 1054589.74 天景山庄
10 11 东门中路旺业豪苑旺业阁123房 1460930.52 旺业豪苑
Как я могу улучшить код или попробовать другой метод? Спасибо за вашу помощь.