Это должно сделать это. Вы можете получить больше информации о том, как посчитать значения, отличные от нан, от здесь и isnull()
от здесь .
Независимо от того, какой ответ вы используете, всегда ловите случай, когда в столбце нет значения NaN. В этом случае оба ответа приведут к ошибке деления на ноль.
import pandas as pd
import numpy as np
test = [np.NAN,np.NAN,np.NAN,np.NAN,0.123128,0.1238123]
df = pd.DataFrame({"B":test})
df["C"] = df["B"].copy()
df["C"][df["C"].isnull()] = (1-df["B"].dropna().sum())/(len(df["B"]) - df["B"].count())
print(df)
Выход:
B C
0 NaN 0.188265
1 NaN 0.188265
2 NaN 0.188265
3 NaN 0.188265
4 0.123128 0.123128
5 0.123812 0.123812