Если вы используете панд, вы можете попробовать что-то вроде этого:
import pandas as pd
import numpy as np
df = pd.DataFrame({
"category": ["a", "a", "a", "a", "b", "b", "b", "b"],
"weight": [1.0, 1.0, np.nan, 2.0, np.nan, 3.0, 3.0, 3.0]
})
print df
df["weight"].fillna(df.groupby("category")["weight"].transform("median"), inplace=True)
print df
Исходный кадр данных:
category weight
0 a 1.0
1 a 1.0
2 a NaN
3 a 2.0
4 b NaN
5 b 3.0
6 b 3.0
7 b 3.0
Результат:
category weight
0 a 1.0
1 a 1.0
2 a 1.0
3 a 2.0
4 b 3.0
5 b 3.0
6 b 3.0
7 b 3.0