Pandas on Python If-then命令

时间:2018-05-14 19:05:10

标签: python pandas if-statement conditional

我的代码如下

GU_ES3['Qnd'] = GU_ES3['Qnd,hw_m2'] * GU_ES3['UPOR']

我发现,GU_ES3['UPOR']中的某些值为空。在这种情况下,我想打电话给其他专栏,例如GU_ES3['NPOR'],但仅在此情况下,GU_ES3['UPOR']列中的值为0NaN

你能帮助我吗?

2 个答案:

答案 0 :(得分:3)

你想要

  1. 在某种情况下,来自一个DataFrame的值被另一个DataFrame替换
  2. 确保0或NaN得到平等对待
  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'])