gpt4 book ai didi

python - 如何在 2 个数据帧的 3 列中找到最接近的值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:51 27 4
gpt4 key购买 nike

我有两个数据帧中的数据,如下所示:-

Df1
Container_width Container_height Container_depth
19.1 13.8 27.1
14.0 11.5 24.5
30.8 14.6 34.6
24.1 24.6 31.3
38.9 18.2 42.9
53.3 51.3 55.4
55.5 29.0 75.5
19.8 44.5 29.7


Df2
Item_width Item_height Item_depth
19.101496 11.497524 27.081574
19.094842 13.963226 26.889088
30.987301 14.600599 34.808122
38.522297 15.363778 56.248184
22.384495 15.291478 34.511771
30.801670 14.657632 34.703047
30.799078 14.495006 34.611856
22.829969 15.743264 31.294219

对于 Df2 中的每个项目,我想在 Df1 中找到最接近的可能容器尺寸。

示例:-

Item dimensions with : 30.987301    14.600599   34.808122
Should match : 30.8 14.6 34.6

因为元素的所有尺寸都最接近容器的所有尺寸。

根据我对 stackoverflow 的研究,我尝试了 sub、idxmin 和 abs 函数,但无法得到结果。

Df2['val'] = Df2.sub(Df1,axis=0).abs().idxmin(axis=1)

但是通过这种方法我得到了 NaN 结果。

我尝试的第二种方法是:-

Df2.sort_values('pred_height', inplace=True)
Df1.sort_values('container_size_height', inplace=True)
pd.merge_asof(Df2, Df1,left_on = 'pred_height', right_on='container_size_height')

但是我得到的结果非常模糊,而且我无法用这种方法处理所有 3 个维度。

Ideal expected result would be:-
Item_width Item_height Item_depth Container_width Container_height Container_depth
30.987301 14.600599 34.808122 30.8 14.6 34.6

最佳答案

用途:

#cross join for merge both DataFrames together
df = Df2.assign(a=1).merge(Df1.assign(a=1), on='a', how='outer').drop('a', axis=1)

c1 = ['Container_width','Container_height','Container_depth']
c2 = ['Item_width','Item_height','Item_depth']

#get distance to new column
df['d'] = ((df[c2] - df[c1].values) ** 2).sum(axis= 1) ** .5

#get rows with minimal distance per groups
df = df.loc[df.groupby(c2)['d'].idxmin()]
print (df)
Item_width Item_height Item_depth Container_width Container_height \
8 19.094842 13.963226 26.889088 19.1 13.8
0 19.101496 11.497524 27.081574 19.1 13.8
32 22.384495 15.291478 34.511771 19.1 13.8
56 22.829969 15.743264 31.294219 19.1 13.8
50 30.799078 14.495006 34.611856 30.8 14.6
42 30.801670 14.657632 34.703047 30.8 14.6
18 30.987301 14.600599 34.808122 30.8 14.6
28 38.522297 15.363778 56.248184 38.9 18.2

Container_depth d
8 27.1 0.266746
0 27.1 2.302550
32 27.1 8.242983
56 27.1 5.939732
50 34.6 0.105665
42 34.6 0.118080
18 34.6 0.279994
28 42.9 13.651404

关于python - 如何在 2 个数据帧的 3 列中找到最接近的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56982063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com