#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