Используйте eq
(==
) для логической маски и получите первый индекс первого True
с помощью idxmax
:
Замечание :
Решение работает, если оба значения находятся в Серии, второе - после первого значения в c2
.
a = df['c2'].eq(11032).idxmax()
print (a)
2
b = df.loc[a:, 'c2'].eq(11012).idxmax()
print (b)
4
Более общее решение для возврата списка кортежей позначения с индексом theis, и если первое значение не найдено, возвращается пустой список.Если не найдено второе, третье ... значение, оно возвращает только все соответствующие пары:
def get_vals(vals):
out = []
idx = 0
for x in vals:
m = df.loc[idx:, 'c2'].eq(x)
if m.any():
idx = m.idxmax()
out.append((x, idx))
else:
return out
return out
print (get_vals([11032, 11012]))
[(11032, 2), (11012, 4)]
print (get_vals([10, 11012]))
[]
print (get_vals([11032, 10]))
[(11032, 2)]
print (get_vals([10, 11012, 100156]))
[]
print (get_vals([11032, 11012, 100156]))
[(11032, 2), (11012, 4), (100156, 5)]
print (get_vals([11032, 11012, 10]))
[(11032, 2), (11012, 4)]
print (get_vals([11032, 11012, 111123]))
[(11032, 2), (11012, 4)]