>>> df = pd.DataFrame({'a': [1,1,1,1,2,2,2,2], 'b': [0,0,np.nan,1,0,0,1,1], 'c': [5,5,5,np.nan,9,9,6,6]})
>>> df
a b c
0 1 0.0 5.0
1 1 0.0 5.0
2 1 NaN 5.0
3 1 1.0 NaN
4 2 0.0 9.0
5 2 0.0 9.0
6 2 1.0 6.0
7 2 1.0 6.0
Чтобы сохранить прогнозы из регрессии a ~ b, я делаю:
>>> df['pr'] = np.nan
>>> idx = df[(~df.a.isnull()) & (~df.b.isnull())].index
>>> df.loc[idx,'pr'] = sm.OLS(df.a, df.b, missing = 'drop').fit().predict()
>>> df
a b c pr
0 1 0.0 5.0 0.000000
1 1 0.0 5.0 0.000000
2 1 NaN 5.0 NaN
3 1 1.0 NaN 1.666667
4 2 0.0 9.0 0.000000
5 2 0.0 9.0 0.000000
6 2 1.0 6.0 1.666667
7 2 1.0 6.0 1.666667
- Есть ли какой-либо недостаток в этой логике, что-либо, что может привести к ошибкам в моих данных?
- Есть ли более простой способ сделать это?Например, Stata, которая более специфична для конкретной цели, сама все это вычислит, когда найдет нули.