我的代码如下
GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * GU_ES3['UPOR']
我发现,GU_ES3['UPOR']
中的某些值为空。在这种情况下,我想打电话给其他专栏,例如GU_ES3['NPOR']
,但仅在此情况下,GU_ES3['UPOR']
列中的值为0
或NaN
。
你能帮助我吗?
答案 0 :(得分:3)
你想要
对于(2),您可以用NaN替换0,对于(1),您可以使用pd.Series.fillna
用NPOR填充UPOR中的NaN,但仅限于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))
。
答案 1 :(得分:3)
尝试使用pd.Series.where
:
GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * GU_ES3['UPOR'].where(~GU_ES3['UPOR'].isnull() & (GU_ES3['UPOR'] != 0), other=GU_ES3['NPOR'])