Как изменить первое вхождение 'True' в строке на false в пандах - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь изменить первый экземпляр True на False в моем DataFrame в зависимости от строки:

              A       B      C  
   Number
   1          True   True   True   
   2          False  True   True  
   3          False  False  True   

              A       B      C  
   Number
   1          False  True   True   
   2          False  False  True  
   3          False  False  False   

Каждый раз, когда я пытаюсь использовать строку for index, row in target_df.iterrows():, в результате я никогда не нахожу «Истину», когда я просматриваю строку.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете использовать кумулятивную сумму логических значений (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...