Python 获取两个数据帧之间最近的元素-多个条件
我正在比较两个数据帧 我想获得两个数据帧之间最接近的匹配项Python 获取两个数据帧之间最近的元素-多个条件,python,dataframe,Python,Dataframe,我正在比较两个数据帧 我想获得两个数据帧之间最接近的匹配项 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
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上我有替代项目。
我希望得到两个DFs之间最接近的匹配对,如下所示
DF_Final
Item Alternative Item
item1 alternative_item2
item2 alternative_item4
项目1与备选项目2配对,因为它们的“位置”和“结构”相同,并且生产日期最接近(备选项目3在时间上更遥远)
同样,item2与alternative_item4配对,因为这是唯一符合“Location”和“Fabric”标准的备选项
你会用什么方法来解决这个问题
谢谢大家! 您可以按
位置
和结构
合并,然后按位置
,结构
分组,并选择最小差异:
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
您可以按
位置
和结构
合并,然后按位置
,结构
分组,并选择最小差异:
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
事实上,我现在已经看到,并非所有项目都与备选项目配对,尽管它们都有备选项目。我将尝试在这里添加一个更详细的例子。@Rodrigo最好在这里创建一个新问题,这样更多的人可以看到它。实际上我错了。你所做的是完美的,这肯定会帮助其他人!我所要做的就是根据我的具体情况调整merge和groupby中使用的列。为了得到我想要的东西,我不得不尝试不同的组合。就是这样。非常感谢。事实上,我现在已经看到,并非所有项目都与备选项目配对,尽管它们都有备选项目。我将尝试在这里添加一个更详细的例子。@Rodrigo最好在这里创建一个新问题,这样更多的人可以看到它。实际上我错了。你所做的是完美的,这肯定会帮助其他人!我所要做的就是根据我的具体情况调整merge和groupby中使用的列。为了得到我想要的东西,我不得不尝试不同的组合。就是这样。非常感谢。