Как заполнить series ближайшим неотрицательным значением в Pandas
Есть pandas series примерно такой:
|column|
|----|
|-999|
|-999|
|0.1|
|0.15|
|-999|
|0.3|
|0.7|
|-999|
То есть в нем упорядоченные значения по возрастанию и есть пропущенные значения в виде -999, которые нужно заменить на ближайшее неотрицательное значение, при чем пока без разницы будет это большее или меньшее. В моем примере на выходе должно быть примерно как в колонке new_column:
|column|new_column|
|----|------|
|-999|0.1|
|-999|0.1|
|0.1|0.1|
|0.15|0.15|
|-999|0.3|
|0.3|0.3|
|0.7|0.7|
|-999|0.7|
Логически понимаю, что надо как то через рекурсию или через while пробегаться по массиву всех чисел, пока не найдем отличное от -999, но как быть в ситуациях где в одном случае большее число нужно брать, а в другом меньшее. В общем по кускам вроде понимаю, а как объединить в рабочее решение не пойму
Ответы (1 шт):
В Pandas есть все нужные функции для этого. Обычно не бывает таких случаев, когда нужно что-то делать в цикле, всё можно сделать в "векторной форме" (сразу со всем вектором данных):
import pandas as pd
s = pd.Series(map(float, "-999|-999|0.1|0.15|-999|0.3|0.7|-999".split('|')))
print(s)
s[s == -999] = pd.NA
s = s.bfill().ffill()
print(s)
Вывод:
0 -999.00
1 -999.00
2 0.10
3 0.15
4 -999.00
5 0.30
6 0.70
7 -999.00
dtype: float64
0 0.10
1 0.10
2 0.10
3 0.15
4 0.30
5 0.30
6 0.70
7 0.70
dtype: float64