在python中查找所有绝对差中绝对差最小的值

eaf3rand  于 2022-12-21  发布在  Python
关注(0)|答案(1)|浏览(180)

我有两张table:
表A

和表B

对于表A中的每个值,我希望从表B中获取与表A中的值具有最小绝对差的值。此外,由于表B中的同一个值可能与表A中的多个值具有最小绝对差,因此表B中的每个值只能使用一次来与表A中的值匹配。
最终表格应如下所示:

询问ChatGPT后,我尝试了以下操作

results = {}

for x in A['MTM_VALUE']:
    for y in B['MTM_VALUE']:
        min_diff = min(abs(A['MTM_VALUE'] - B['MTM_VALUE']))
    closest_value = min(B['MTM_VALUE'], key = lambda a: abs(a - A['MTM_VALUE']))
    B['MTM_VALUE'].remove(closest_value)
    results[x] = (closest_value, min_diff)

但是,我得到了错误,最好是在 Dataframe 中包含表B中的匹配值。

ogq8wdun

ogq8wdun1#

我们可以对 Dataframe 应用here解决方案:

lst=table_b['MTM_VALUE'].tolist() #convert table_b values to a list

def closest(lst, K):
     lst = np.asarray(lst)
     idx = (np.abs(lst - K)).argmin()
     return lst[idx]
table_a['closest']=table_a['MTM_VALUE'].apply(lambda x: closest(lst, x))

或者一行:

table_a['closest'] = table_a['MTM_VALUE'].apply(lambda x: lst[(np.abs(np.asarray(lst) - x)).argmin()])

输出

ID  MTM_VALUE  closest
0   1      12.54     15.36
1   2      16.84     17.36
2   3       5.00      2.00
3   4     152.96    160.00
4   5      48.36     42.91

相关问题