Сохранить значение вектора пока оно не изменилось
Есть вектор со значениями 1.0, -1.0 или nan.
import numpy as np
arr = np.array([np.nan, 1.0, np.nan, np.nan, -1.0, np.nan, -1.0, np.nan, 1.0, np.nan, np.nan])
Задача сохранить предыдущее значение вектора до другого значения опуская nan. Без циклов.
В результате должно быть:
[nan, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0]
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
import numpy as np
import pandas as pd
arr = np.array([np.nan, 1.0, np.nan, np.nan, -1.0, np.nan, -1.0, np.nan, 1.0, np.nan, np.nan])
arr = pd.Series(arr).fillna(method="ffill").to_numpy()
print(arr) # [nan 1. 1. 1. -1. -1. -1. -1. 1. 1. 1.]
Автор решения: mkkik
→ Ссылка
import numpy as np
arr = np.array([np.nan, 1.0, np.nan, np.nan, -1.0, np.nan, -1.0, np.nan, 1.0, np.nan, np.nan])
class Replacer:
current = np.nan
def __call__(self, v):
if not np.isnan(v):
self.current = v
return self.current
new_arr = np.fromiter(map(Replacer(), arr), dtype=arr.dtype)
print(new_arr) # -> [nan 1.0 1.0 1.0 -1.0 -1.0 -1.0 -1.0 1.0 1.0 1.0]