Python 在2(或更多)值之间查找DF的第一个索引

Python 在2(或更多)值之间查找DF的第一个索引,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,有了熊猫的df,如果可能的话,我希望有“V1”|“V2”的第一个索引出现,而不必扫描所有的df。我能让它在第一场比赛时停下来吗 我开始做I=df[(df[“track”]=“V1”)|(df[“track”]=“V2”)])。iloc[0]但是我得到了整行并有一个列表。看起来像是你想要的: df.track.isin(['V1', 'V2']).idxmax() 如果你想在第一场比赛中停下来,这里有一种使用生成器的方法: match = {'V1', 'V2'} next((ix for i

有了熊猫的
df
,如果可能的话,我希望有
“V1”|“V2”
的第一个索引出现,而不必扫描所有的df。我能让它在第一场比赛时停下来吗

我开始做
I=df[(df[“track”]=“V1”)|(df[“track”]=“V2”)])。iloc[0]
但是我得到了整行并有一个列表。

看起来像是你想要的:

df.track.isin(['V1', 'V2']).idxmax()

如果你想在第一场比赛中停下来,这里有一种使用生成器的方法:

match = {'V1', 'V2'}
next((ix for ix, i in enumerate(df.track.values) if i in match), None)
# 1

只需使用相同的代码,但有以下更改

由此

i = df[(df["track"] == "V1")  | (df["track"] == "V2")].iloc[0]

与或一起使用

或使用

使用稍作更改的解决方案-对于测试,请在运算符中使用
-it循环仅与您的要求匹配:

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)
如果可能,解决方案中没有与
if else
语句匹配的值,但它会测试所有匹配的值:

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


您可以使用
where
first\u valid\u index
处理未找到
V1
V2
的情况。在这种情况下,
first\u valid\u index
返回
None

idx = df.where(df.track.isin(['V1', 'V2'])).first_valid_index()

如果没有匹配项,则扫描所有ad数据失败:(返回一行将其更改为.iloc[0]:)已编辑,您现在可以使用它了。:)它返回一个Seriedf[(df[“track”]=“V1”)|(df[“track”]=“V2”)])。head(1)。index
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)
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)
idx = df.where(df.track.isin(['V1', 'V2'])).first_valid_index()