有没有一种方便的方法根据数字的大致位置来索引 pandas 数据框?

问题描述 投票:0回答:1

我正在分析一些光谱数据,我的数据帧索引是具有小数点后 9 位精度的数字。如果我不输入确切的索引,数据框将不会返回值。我必须使用 df.iloc(N),但这需要我继续猜测哪个索引最接近所需索引。是否有某种方法可以让我输入 df[600],它为我提供最接近该数字的索引?

我尝试过iloc。还有一种过于繁琐的解决方案,即首先手动定位索引,

df.index[np.abs(df.index - target_value).argmin()] 然后使用该索引,但是没有更快的方法吗?

pandas indexing
1个回答
0
投票

如果您想要一种快速方法,您可以使用基于 numpy.searchsorted

这个出色方法的变体:

def get_closest(df, values):
    # get index as numpy array
    a = df.index.to_numpy()

    # get insert positions
    idxs = np.searchsorted(a, values, side="left")
    
    # find indexes where previous index is closer
    prev_idx_is_less = ((idxs == len(a)) |
                         (np.fabs(values - a[np.maximum(idxs-1, 0)])
                        < np.fabs(values - a[np.minimum(idxs, len(a)-1)])))
    idxs[prev_idx_is_less] -= 1
    
    # index DataFrame
    return df.loc[a[idxs]]

get_closest(df, [0.487948])
#           col
# 0.437587    2

get_closest(df, [0.487948, 0.6432008])
#           col
# 0.437587    2
# 0.645894    6
© www.soinside.com 2019 - 2024. All rights reserved.