【发布时间】:2021-05-21 08:18:24
【问题描述】:
希望使用条件将最高匹配行值从 Dataframe2 映射到 Dataframe1。我们还需要检查 df2['from'] 和 df['to'] 之间的 df1['sal_date'] 。
想要将 df1 中的每一行(df1['id_number'])与 df2 的整列(df2['identity_No'])进行比较。我已申请使用部分匹配来提取条件及其工作,
但我如何检查 df1['sal_date'] 是否属于 df2['from'] 和 df['to'] 中的哪一个。
df1
score id_number company_name company_code sal_date action_reqd
20 IN2231D AXN pvt Ltd IN225 2019-12-22 Yes
45 UK654IN Aviva Intl Ltd IN115 2018-10-10 No
65 SL1432H Ship Incorporations CZ555 2015-08-19 Yes
35 LK0678G Oppo Mobiles pvt ltd PQ795 2018-06-26 Yes
59 NG5678J Nokia Inc RS885 2020-12-28 No
20 IN2231D AXN pvt Ltd IN215 2020-12-08 Yes
df2
OR_score identity_No comp_name comp_code dte_from dte_to
51 UK654IN Aviva Int.L Ltd IN515 2017-12-05 2018-10-13
25 SL6752J Ship Inc Traders CZ555 2013-08-07 2022-06-21
79 NG5678K Nokia Inc RS005 2018-10-13 2019-12-15
51 UK654IN Aviva Int.L Ltd IN525 2018-12-15 2020-12-24
20 IN22312 AXN pvt Ltd IN255 2019-12-10 2022-06-21
79 NG5678K Nokia Inc RS055 2019-06-08 2024-12-30
38 LK0665G Oppo Mobiles ltd PQ895 2016-10-10 2022-12-08
20 IN22312 AXN pvt Ltd IN275 2017-08-17 2018-10-13
75 NG5678K Nokia Inc RS055 2013-06-08 2016-12-30
df1.id_number 需要与 df2.identity_No 进行比较,df1.sal_date 必须在 df2.from 和 df2.to 之间。
根据 df1['id_number'] 的第 1 行查找匹配将匹配 df2['identity_No'] 的所有行,并且匹配百分比最高。 df2['identity_No'] 的第 4 行,超过 80%,且 df1.sal_date 介于 df2.from 和 df2.to 之间。
它会将相应的值从 df2 的第 4 行复制到 df1 的第 1 行。 同样适用于 df1 的每一行。
预期输出:
score id_number company_name company_code match_acc action_reqd
20 IN22312 AXN pvt Ltd IN255 2019-12-22 Yes
51 UK654IN Aviva Int.L Ltd IN515 2018-10-10 No
25 SL1432H Ship Incorporations CZ555 2015-08-19 Yes
38 LK0665G Oppo Mobiles ltd PQ795 2018-06-26 Yes
79 NG5678K Nokia Inc RS055 2020-12-28 No
20 IN22312 AXN pvt Ltd IN255 2020-12-08 Yes
我现在已经试过了:
for index, row in df1.iterrows():
for index2, config2 in df2.iterrows():
variable = fuzz.partial_ratio(row['id_number'], config2['identity_No'])
if variable>=80:
df1['id_number'][index] = config2['identity_No']
df1['company_name'][index] = config2['comp_name']
df1['company_code'][index] = config2['comp_code']
df1['score'][index] = config2['OR_Score']
如果条件为变量 >=80% 且 df1.sal_date 介于 df2.from 和 df2.to 之间,我如何执行剩余代码
请建议如何执行。
【问题讨论】:
-
如果 df1['id_number'] 匹配超过 80% 与 2 个或更多 df2['identity_No'] 怎么办?
-
@Ank - 除了检查超过 80% 的匹配,我们还需要检查 df1['sal_date'] 是否在 df2['from'] 和 df2['to'] 之间。
-
是的,我明白了,如果在应用这两个条件后,df1 中的一行映射到 df2 中的 2 行或更多行?
-
或者确定这两个条件都应用后,只有1:1的映射?
-
哦,是的,不,那只是数学方程式,抱歉。只是想弄清楚这个逻辑是否足够。