首页 > 解决方案 > 在 2 个(或更多)值之间找到 DF 的第一个索引

问题描述

有了df熊猫,如果可能的话,我希望第一个索引出现,"V1" | "V2"而不必扫描所有的 DF。我可以让它在第一场比赛中停止吗?

我开始做i = df[(df["track"] == "V1") | (df["track"] == "V2")].iloc[0],但我得到了完整的行并且有一个列表。

标签: pythonpandasdataframeindexing

解决方案


使用稍微改变了这个解决方案 - 用于测试使用in运算符 - 它只循环匹配您的要求:

from numba import njit

@njit
def get_first_index_nb(A, k):
    for i in range(len(A)):
        if A[i] in k:
            return i
    return None

#pandas 0.24+
idx = get_first_index_nb(df.track.to_numpy(), ['V1', 'V2'])
#oldier pandas versions
#idx = get_first_index_nb(df.track.values, ['V1', 'V2'])
print (idx)

Series.idxmax如果可能没有与if-else语句匹配的值的解决方案and Series.any,但它会测试所有匹配的值:

m = df.track.isin(['V1', 'V2'])
idx = m.idxmax() if m.any() else None

或者:

idx = next(iter(df.index[df.track.isin(['V1', 'V2'])]), None)

推荐阅读