Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Rishabh MalhotraОтветов: 2

У меня есть фреймворк данных 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

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

pythonpandas

Ответы

Ответ 1 · рейтинг 3 · jezrael

Для повышения производительности можно использовать векторизованное решение, это похоже на это решение с 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

Ответ 2 · рейтинг 1 · Pygirl

Попробуйте использовать 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы