Вы можете использовать кумулятивную сумму логических значений (False соответствует 0; True для 1) для каждой строки вместе с DataFrame.mask()
:
>>> condition = df.cumsum(axis=1) == 1
>>> df.mask(condition, False)
a b c
0 False True True
1 False False True
2 False False False
df.mask(self, cond, other=nan)
Возвращает объект той же формы, что и сам и чьи соответствующие записи
от себя, где cond ложно, а в противном случае от другого.
В этом случае condition
является Ложным везде, кроме точек, в которых вы хотите переключиться True
-> False
:
>>> condition
a b c
0 True False False
1 False True False
2 False False True
Еще одним вариантом будет использование NumPy:
>>> row, col = np.where(df.cumsum(axis=1) == 1)
>>> df.values[row, col] = False
>>> df
a b c
0 False True True
1 False False True
2 False False False