#python #pandas
#python #панды
Вопрос:
У меня есть DataFrame
объект df
с таким столбцом:
[In]: df
[Out]:
id sum
0 1 NaN
1 1 NaN
2 1 2
3 1 NaN
4 1 4
5 1 NaN
6 2 NaN
7 2 NaN
8 2 3
9 2 NaN
10 2 8
10 2 NaN
... ... ...
[1810601 rows x 2 columns]
NaN
В моем столбце много значений, и я хочу заполнить их следующим образом:
- если
NaN
находится в начале (для firstindex
perid
equals0
), то оно должно быть0
- иначе, если
NaN
я хочу взять значение из предыдущего индекса для того жеid
Вывод должен быть таким:
[In]: df
[Out]:
id sum
0 1 0
1 1 0
2 1 2
3 1 2
4 1 4
5 1 4
6 2 0
7 2 0
8 2 3
9 2 3
10 2 8
10 2 8
... ... ...
[1810601 rows x 2 columns]
Я пытался сделать это «шаг за шагом», используя цикл with iterrows()
, но это очень неэффективный метод. Я считаю, что это можно сделать быстрее с помощью методов pandas
Комментарии:
1. У Pandas есть функция для этого! Взгляните на
pandas.DataFrame.fillna
.2. Но как я могу использовать
pandas.DataFrame.fillna
для этого конкретного условия?3. @Justin
fillna
не будет поддерживать условное заполнение
Ответ №1:
Попробуйте ffill, как предложено с помощью groupby
df['sum'] = df.groupby('id')['sum'].ffill().fillna(0)