Как заполнить все нули в столбце самым первым встретившимся ненулевым значением?
В столбце фрейма данных есть много нулей прежде, чем пойдут конкретные значения.
Как заполнить все нули в столбце самым первым встретившимся ненулевым значением?
Ссылка на файл с примером данных.
6/20/2000 0
6/21/2000 0
6/22/2000 0
6/23/2000 400
6/26/2000 200
6/27/2000 2200
6/28/2000 500
6/29/2000 0
6/30/2000 12100
Первое число - 400, тогда заполняем все нули до него значением 400:
6/20/2000 400
6/21/2000 400
6/22/2000 400
6/23/2000 400
6/26/2000 200
6/27/2000 2200
6/28/2000 500
6/29/2000 0
6/30/2000 12100
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
Наверное, можно как-то и проще, но я не умею:
import pandas as pd
# создаём датафрейм с примером данных
df = pd.DataFrame({'data': [0,0,0,2,34,0,3,4,5,0]})
# заполняем NA начало данных, пока идут нули
df.loc[df.data.cumsum() == 0, 'data'] = pd.NA
# заполнение NA проходом "назад"
df['data'] = df['data'].bfill()
df
Вывод:
data
0 2
1 2
2 2
3 2
4 34
5 0
6 3
7 4
8 5
9 0
Автор решения: passant
→ Ссылка
Показываю, как это сделать на Series. Надеюсь, переделать для DataFrame для вас труда не составит.
Итак, если мы хотим все нули, которые идут ДО ПОЯВЛЕНИЯ первого значения заменить на это самое первое значение, то сделать это можно примерно вот так:
ser=pd.Series([0,0,0,400,200,220,0,500,0,0,12,0,100])
ser[:ser[ser!=0].index[0]]=ser[ser!=0].iloc[0]
Результат:
0 400
1 400
2 400
3 400
4 200
5 220
6 0
7 500
8 0
9 0
10 12
11 0
12 100
Автор решения: MaxU
→ Ссылка
В данном случае можно воспользоваться методом Series.first_valid_index():
last_zero_idx = df["C-B"].replace(0, np.nan).first_valid_index() - 1
df.loc[:last_zero_idx, "C-B"] = df.loc[last_zero_idx+1, "C-B"]