Изменение значений в строке до тех пор, пока значение не станет нулевым или> 1 с пандами - PullRequest
0 голосов
/ 24 октября 2018

Я хочу изменить значения в строке, пока значение не станет> 1

. У меня есть следующие данные:

       Week1  week 2  week 3
Value   0      0       1
Value   0      1       2

Я хочу переключить ноль наноль, пока строка не станет больше, чем 0.

Как бы я мог написать это в пандах?

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете использовать mask с 2 логическими масками, объединенными в цепочку & для поразрядной AND:

print (df)
       Week 1  week 2  week 3  week 4  week 5
Value       0       0       1       0       1
Value       0       1       2       0       1

df = df.mask(df.gt(1).cumsum(axis=1).eq(0) & df.eq(0), np.nan)
print (df)
       Week 1  week 2  week 3  week 4  week 5
Value     NaN     NaN       1     NaN       1
Value     NaN     1.0       2     0.0       1

Подробности :

Сравнить по gt (>):

print (df.gt(1))
       Week 1  week 2  week 3  week 4  week 5
Value   False   False   False   False   False
Value   False   False    True   False   False

Использовать cumsum для проверки значений поиска до первого False в строке:

print (df.gt(1).cumsum(axis=1))
       Week 1  week 2  week 3  week 4  week 5
Value       0       0       0       0       0
Value       0       0       1       1       1

Сравнить по eq (==):

print (df.gt(1).cumsum(axis=1).eq(0))
       Week 1  week 2  week 3  week 4  week 5
Value    True    True    True    True    True
Value    True    True   False   False   False

Сравнить исходные данные:

print (df.eq(0))
       Week 1  week 2  week 3  week 4  week 5
Value    True    True   False    True   False
Value    True   False   False    True   False

Цепочка вместе:

print (df.gt(1).cumsum(axis=1).eq(0) & df.eq(0))
       Week 1  week 2  week 3  week 4  week 5
Value    True    True   False    True   False
Value    True   False   False   False   False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...