Вы хотите
- значения из одного DataFrame заменяются другим при определенной ситуации
- убедитесь, что 0 или NaN обрабатываются одинаково
Для (2) вы можете заменить 0 на NaN, а для (1) вы можете использовать pd.Series.fillna
для заполнения NaN в UPOR с помощью NPOR, но только там, где это NaN.
i = GU_ES3['Qnd,hw_m2']
j = GU_ES3['UPOR'].replace(0, np.nan).fillna(GU_ES3['NPOR'])
GU_ES3['Qnd'] = i * j
В качестве альтернативы вы можете использовать np.where
для выполнения замены:
GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * np.where(
GU_ES3['UPOR'].replace({0 : np.nan}).isna(), GU_ES3['NPOR'], GU_ES3['UPOR']
)
Обратите внимание, что при замене, если, например, вы также хотите заменить 1, 2 или 3, вам просто нужно будет использовать .replace(dict.fromkeys([1, 2, 3], np.nan))
в своем коде.