I have a data frame like
df = pd.DataFrame({\"A\":[1,2,np.nan],\"B\":[np.nan,10,np.nan], \"C\":[5,10,7]})
A B C
0 1.0 NaN 5
1 2.0 10.0 10
option 1
pandas
df.assign(D=df.lookup(df.index, df.isnull().idxmin(1)))
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
option 2
numpy
v = df.values
j = np.isnan(v).argmin(1)
df.assign(D=v[np.arange(len(v)), j])
A B C D
0 1.0 NaN 5 1.0
1 2.0 10.0 10 2.0
2 NaN NaN 7 7.0
naive time test
over given data
over larger data