Вам не нужно повторять, это будет очень медленно. Вот векторизованное решение, сравнивая векторы с shift
, mul
и div
df2 = df.shift(axis=1) # shift the values one place to compare
m1 = df >= df2.mul(2) # values which are double or more
m2 = df <= df2.div(2) # values which are half or less
counts = (m1|m2).sum(axis=1)
Выход
0 2
1 1
2 0
3 2
dtype: int64
Шаг за шагом :
Сдвиг значений на одно место вправо для сравнения:
df.shift(axis=1)
A B C
0 NaN 1.0 0.0
1 NaN 4.0 6.0
2 NaN 3.0 3.0
3 NaN 5.0 0.0
Сравнение того, какое значение в два или более раз превышает его сосед:
df >= df2.mul(2)
A B C
0 False False True
1 False False False
2 False False False
3 False False True
Сравнение того, какое значение наполовину или меньше его соседа:
df <= df2.div(2)
A B C
0 False True False
1 False False True
2 False False False
3 False True True
Окончательно получим счет, где сравнение один или два - True
:
уведомлениечто |
является оператором or
в pandas
m1|m2
A B C
0 False True True
1 False False True
2 False False False
3 False True True