# Python Pandas For Your Grandpa - 5.2 Challenge: Pickle

Contents

## Setup

Given a Series called `pickle`, replace `NaN`s using the following algorithm.

For each NaN:

1. get the nearest non-`NaN` value before and after it
2. replace `NaN` with the minimum of those two non-`NaN` values

For `NaN`s on or near the endpoints of the Series, use the closest non-`NaN` value.

``````import numpy as np
import pandas as pd

pickle = pd.Series([1.5, np.nan, 2.3, np.nan, np.nan, -3.9, np.nan, 4.5, np.nan, np.nan, np.nan, 1.9, np.nan])
print(pickle)
## 0     1.5
## 1     NaN
## 2     2.3
## 3     NaN
## 4     NaN
## 5    -3.9
## 6     NaN
## 7     4.5
## 8     NaN
## 9     NaN
## 10    NaN
## 11    1.9
## 12    NaN
## dtype: float64
``````

## Solution

``````prevs = pickle.ffill()
nexts = pickle.bfill()
pickle.fillna(pd.concat([prevs, nexts], axis=1).min(axis=1))
## 0     1.5
## 1     1.5
## 2     2.3
## 3    -3.9
## 4    -3.9
## 5    -3.9
## 6    -3.9
## 7     4.5
## 8     1.9
## 9     1.9
## 10    1.9
## 11    1.9
## 12    1.9
## dtype: float64
``````