подсчитать количество нулей между двумя ненулевыми числами последовательно в кадре данных

У меня есть фреймворк данных pandas, и я пытаюсь подсчитать количество нулей перед каждой цифрой, пока не появится ненулевое число, и запишите его в следующий столбец. Как я могу сделать это с помощью панд?

Вот как вывод должен быть в столбце zeroCumulative. Например, количество нулей до 101 равно 0, количество нулей до 73 равно 3 и так далее. Также необходимо учитывать количество нулей перед любым нулем.

value zeroCumulative 
70
127         0 
101         0 
0           0 
0           1 
0           2 
73          3 
0           0 
55          1 
0           0 

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


person Rishabh Malhotra    schedule 18.03.2020    source источник


Ответы (2)


Для повышения производительности можно использовать векторизованное решение, это похоже на это решение с Series.shift столбца и сравнить по 0:

a = df['value'].shift().eq(0)
b = a.cumsum()
df['new'] = b.sub(b.mask(a).ffill().fillna(0)).astype(int)
print (df)
   value  zeroCumulative  new
0     70               0    0
1    127               0    0
2    101               0    0
3      0               0    0
4      0               1    1
5      0               2    2
6     73               3    3
7      0               0    0
8     55               1    1
9      0               0    0
person jezrael    schedule 18.03.2020

Попробуйте использовать cumsum() and cumcount():

df['zeroCumulative'] = df["value"].groupby((df["value"].ne(0)).shift().cumsum()).cumcount()

дф:

    value   zeroCumulative
0   70      0
1   127     0
2   101     0
3   0       0
4   0       1
5   0       2
6   73      3
7   0       0
8   55      1
9   0       0
person Pygirl    schedule 18.03.2020