Используйте diff()
s = pd.Series(list_1)
s.loc[(s.diff() == 3) & (s.index % 2 == 1)] = -1
, что дает
[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, 65, -1, 81, 21, 25, 96, 101, 8, 11]
Теперь, если вам нужны четные позиции, относящиеся к каждая этих последовательностей независимо, используйте groupby
и cumcount
s.loc[s.groupby(s.diff().ne(3).cumsum()).cumcount() % 2 == 1] = -1
, что дает
[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]
Разница будет последней -1
в вашем примере. Первое решение предполагает, что 11
не следует заменять, потому что он находится в неравном положении в вашем list_1
. Второе решение предполагает, что его следует заменить, потому что он находится в четной позиции в подсписке [8, 11]
.