Python накапливает 1 и сбрасывает в 0, как только условие выполнено - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время у меня есть набор данных ниже, и я пытаюсь накапливать значение, если ColA равно 0, а сбросить значение до 0 (перезапустить счет снова), если ColA снова равно 1.

ColA  
 1        
 0        
 1        
 1        
 0        
 1        
 0         
 0        
 0        
 1        
 0        
 0        
 0        

Мой ожидаемый результаткак показано ниже

ColA  Accumulate
 1        0
 0        1
 1        0 
 1        0 
 0        1
 1        0
 0        1 
 0        2 
 0        3
 1        0
 0        1
 0        2
 0        3

Текущий код, который я использую

test['Value'] = np.where ( (test['ColA']==1),test['ColA'].cumsum() ,0) 



ColA   Value
 1        0
 0        1
 1        0 
 1        0 
 0        2
 1        0
 0        3 
 0        4 
 0        5
 1        0
 0        6
 0        7
 0        8

Спасибо, пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Используйте cumsum, если важна производительность:

a = df['ColA'] == 0
cumsumed = a.cumsum()
df['Accumulate'] = cumsumed-cumsumed.where(~a).ffill().fillna(0).astype(int)

print (df)
    ColA  Accumulate
0      1           0
1      0           1
2      1           0
3      1           0
4      0           1
5      1           0
6      0           1
7      0           2
8      0           3
9      1           0
10     0           1
11     0           2
12     0           3
0 голосов
/ 23 мая 2018

Это должно сделать это:

test['Value'] = (test['ColA']==0) * 1 * (test['ColA'].groupby((test['ColA'] != test['ColA'].shift()).cumsum()).cumcount() + 1)

Это адаптация этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...