Option 1
听起来你可以使用np.where
为了这 -
i = df.var1 == 'A'
j = df.var3 == 'A'
df['var5'] = np.where(i, df.var2, np.where(j, df.var4, np.NaN))
df
var1 var2 var3 var4 var5
0 A 23 B 7 23.0
1 B 13 C 4 NaN
2 C 12 A 11 11.0
3 A 5 C 15 5.0
Option 2
另一种选择是np.select
-
df['var5'] = np.select([i, j], [df.var2, df.var4], default=np.nan)
df
var1 var2 var3 var4 var5
0 A 23 B 7 23.0
1 B 13 C 4 NaN
2 C 12 A 11 11.0
3 A 5 C 15 5.0
Note, i
and j
与代码清单中定义的变量相同Option 1.
Option 3
pd.Series.mask
/where
df.var2.mask(~i, df.var4.mask(~j, np.nan))
0 23.0
1 NaN
2 11.0
3 5.0
Name: var2, dtype: float64