Python 在pandas中的多索引数据帧中查找最接近的值

Python 在pandas中的多索引数据帧中查找最接近的值,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我试图根据数据帧索引中最接近的值来选择数据。 我从excel中读取文件,并对数据框进行多索引,如下所示: df = df.set_index(['Year', 'delta', 'ix']) 结果看起来有点像这样 Year delta ix Temp 2010 6 4 34 5.1 38 7 4.5 36

我试图根据数据帧索引中最接近的值来选择数据。 我从excel中读取文件,并对数据框进行多索引,如下所示:

df = df.set_index(['Year', 'delta', 'ix'])
结果看起来有点像这样

Year    delta       ix          Temp
2010    6           4           34
                    5.1         38
        7           4.5         36
                    3.7         37
2011    6           4           37
                    5.1         35
        7           4.5         38
                    3.7         41
2012    6           4           43
                    5.1         39
        7           4.5         38
                    3.7         37.5
我要搜索的值在此数据框中不存在,因此我要查找下一个最接近的值。例如,我想在2011年找到delta 6.7和ix 4.9的临时值,但由于这些值不在数据帧中,我应该得到具有最接近索引的临时值,在本例中是delta 7和ix 5.1。 所以,我从中获取数据的行是

Year    delta       ix          Temp
2010    7           5.1           39

提前谢谢。

我会重置索引以处理更简单的列

然后,可以求列与其目标的距离之和,并使用函数获取最近的行id:

df = df.reset_index()
closest_row_id = ((df["Year"] - wanted_year).abs() + (df["delta"] - wanted_delta).abs() + (df["ix"] - wanted_ix).abs()).idxmin()
closest_temperature_row = df.loc[closest_row_id]
# If you only want the temperature you can do:
# closest_temp = df.loc[closest_row_id, "Temp"]
df = df.set_index(['Year', 'delta', 'ix'])

最近值的定义不清楚-您应该选择最接近其目标的列所在的行、平均距离最小的行还是其他方式?例如,如果一行具有确切的请求增量,但在ix中非常远,而另一行与所有行都非常接近,那么您希望选择哪一行?很抱歉,现在我想我应该详细阐述一下。如果存在这样一种情况,即我们对delta有一个精确的匹配,但与delta和ix都很接近但不完全等于查询的情况相比,ix相差很远,那么最好选择两个值都接近查询的情况,而不是一个完全匹配,但另一个与所查询的值相差很远的值。@HamzaWaheed这是一个开始,但您还没有定义“接近”的含义。公式(例如dist=np.abs(ix-ix0)+np.abs(delta-delta0))将消除所有歧义