Как найти все нулевые ячейки в фрейме данных python panda и заменить их?

#python #pandas

#python #панды

Вопрос:

Мои данные выглядят так:

 df = pd.DataFrame({'a': [5,0,0, 6, 0, 0, 0 , 12]})
  

Я хочу посчитать нули выше 6 и заменить их на (6/count 1)=(6/3)=2 (я также заменю исходные 6)
Я также хочу проделать аналогичную вещь с нулями выше 12.
Итак, (12/count)=(12/3)=4
Таким образом, конечный результат будет:

 [5,2,2, 2, 3, 3, 3 , 3]
  

Я не уверен, с чего начать. Существуют ли какие-либо функции, которые это делают?
Спасибо.

Ответ №1:

Используйте GroupBy.transform with mean и пользовательские группы, созданные с помощью test not equal 0 , порядок замены, кумулятивная сумма и порядок замены на оригинал:

 g = df['a'].ne(0).iloc[::-1].cumsum().iloc[::-1]
df['b'] = df.groupby(g)['a'].transform('mean')
print (df)
    a  b
0   5  5
1   0  2
2   0  2
3   6  2
4   0  3
5   0  3
6   0  3
7  12  3