为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个数据帧中查找最接近值的索引

从另一个数据帧中查找最接近值的索引

拉莫斯之舞 2021-06-28 21:23:07
我有两个数据框测量仪器的两个属性,其中深度偏移了某个 dz。请注意,下面的示例非常简化。df1 = pd.DataFrame({'depth_1': [0.936250, 0.959990, 0.978864, 0.991288, 1.023876, 1.045801, 1.062768, 1.077090, 1.101248, 1.129754, 1.147458, 1.160193, 1.191206, 1.218595, 1.256964] })df2 = pd.DataFrame({'depth_2': [0.620250, 0.643990, 0.662864, 0.675288, 0.707876, 0.729801, 0.746768, 0.761090, 0.785248, 0.813754, 0.831458, 0.844193, 0.875206, 0.902595, 0.940964 ] })如何df2.depth_2获得最接近的第一个元素的索引df1.depth_1?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

使用reindex方法nearest


df2.reset_index().set_index('depth_2').reindex(df1.depth_1,method = 'nearest')['index'].unique()

Out[265]: array([14], dtype=int64)


查看完整回答
反对 回复 2021-06-29
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您可以使用 pandasmerge_asof函数(如果不是在现实生活中,您需要先对数据进行排序)


df1 = df1.sort_values(by='depth_1')

df2 = df2.sort_values(by='depth_2')

pd.merge_asof(df1, df2.reset_index(), left_on="depth_1", right_on="depth_2", direction="nearest")

如果您只想要 df1 中的第一个值,您可以在顶行进行连接:


df2 = df2.sort_values(by='depth_2')

pd.merge_asof(df1.head(1), df2.reset_index(), left_on="depth_1", right_on="depth_2", direction="nearest")



查看完整回答
反对 回复 2021-06-29
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

获取的所有元素df2和第一个元素之间的绝对差df1,然后获取它的索引:


import pandas as pd

import numpy as np


def get_closest(df1, df2, idx):

   abs_diff = np.array([abs(df1['depth_1'][idx]-item) for item in df2['depth_2']])

   return abs_diff.argmin()


df1 = pd.DataFrame({'depth_1': [0.936250, 0.959990, 0.978864, 0.991288, 1.023876, 1.045801, 1.062768, 1.077090, 1.101248, 1.129754, 1.147458, 1.160193, 1.191206, 1.218595, 1.256964] })


df2 = pd.DataFrame({'depth_2': [0.620250, 0.643990, 0.662864, 0.675288, 0.707876, 0.729801, 0.746768, 0.761090, 0.785248, 0.813754, 0.831458, 0.844193, 0.875206, 0.902595, 0.940964 ] })


get_closest(df1,df2,0)

输出:


14


查看完整回答
反对 回复 2021-06-29
  • 3 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信