首页 > 解决方案 > 获取两个数据框之间最接近的元素 - 多个条件

问题描述

我有两个要比较的数据框。

我想获得两个数据框之间最接近的匹配项。

DF1

Item   Location   Fabric   Date produced

item1     Spain     AB2     11/01/2015
item2     France    ST1     25/04/2017


DF2

Alternative Item      Location    Fabric   Date produced

alternative_item1        Spain       AB6      15/01/2015
alternative_item2        Spain       AB2      25/05/2014
alternative_item3        Spain       AB2      11/03/2013
alternative_item4       France       ST1      25/04/2017
alternative_item5           UK       ST1      19/02/2020
alternative_item6        Italy       ST1      07/04/2012

上面,在 DF1 我有 2 个项目,在 DF2 我有替代项目。我正在寻找两个 DF 之间最接近的匹配对,如下所示。

DF_Final

Item     Alternative Item

item1   alternative_item2     
item2   alternative_item4

item1 与alternative_item2 配对,因为它们的“位置”和“面料”相同并且生产日期最接近(alternative_item3 在时间上更远)。

同样,item2 与alternative_item4 配对,因为这是唯一符合“Location”和“Fabric”标准的替代项目。

你会使用什么方法来解决这个问题?

谢谢!

标签: pythondataframe

解决方案


Location您可以按和合并Fabric,然后按 分组LocationFabric并选择最小差异:

out = pd.merge(df1, df2, on=['Location', 'Fabric'])
out['diff'] = out['Date produced_x'] - out['Date produced_y']
out = out.iloc[out.groupby(['Location', 'Fabric'])['diff'].agg(lambda x: x.sort_values().head(1).index)][['Item', 'Alternative Item']]

print(out)

印刷:

    Item   Alternative Item
2  item2  alternative_item4
0  item1  alternative_item2

推荐阅读