python - 获取两个数据框之间最接近的元素 - 多个条件
问题描述
我有两个要比较的数据框。
我想获得两个数据框之间最接近的匹配项。
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”标准的替代项目。
你会使用什么方法来解决这个问题?
谢谢!
解决方案
Location
您可以按和合并Fabric
,然后按 分组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
推荐阅读
- linux - 将空文件从当前目录移动到子目录
- queue - 如何在 Mulesoft 中共享持久队列“应用程序间”?
- reactjs - 之前使用上下文中的数据可用
- android - Android Studio 构建未定义的参考问题
- typescript - 无法让 typescript 在 webpack 中与 babel 很好地配合使用
- r - 用 paste0 变异
- css - 从左到右显示数组列表
- powershell - 如何防止主机退出并返回退出码?
- redirect - 如何将 Kotlin 标准输出重定向到文件?
- python - Pandas 的 read_csv C 引擎有什么方法可以忽略或替换 Unicode 解析错误?