Python 在pandas中的多索引数据帧中查找最接近的值
我试图根据数据帧索引中最接近的值来选择数据。 我从excel中读取文件,并对数据框进行多索引,如下所示: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
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))将消除所有歧义