Pandas 在 Python If-then 命令上

Pandas on Python If-then command

我有一个代码如下

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

我发现 GU_ES3['UPOR'] 中的某些值是空白的。在这种情况下,我想调用其他专栏,例如GU_ES3['NPOR'],但仅在这种情况下,当列 GU_ES3['UPOR'] 中的值为 0NaN.

你能帮帮我吗?

您想

  1. 在某种情况下,一个 DataFrame 的值会被另一个 DataFrame 替换
  2. 确保平等对待 0 或 NaN

对于(2),您可以用NaN替换0,对于(1),您可以使用pd.Series.fillna将UPOR中的NaN替换为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))

尝试使用 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'])