我有这个 df:
data = np.array([[np.nan, 0], [2, 0], [np.nan, 1]])
df = pd.DataFrame(data=data, columns = ['a', 'b'])
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
a b
--------
0 NaN 0.0
1 2.0 0.0
2 NaN 1.0
Run Code Online (Sandbox Code Playgroud)
我的目标是创建第三列“c”,当“a”列等于 NaN 且“b”列等于 0 时,该列的值为 1。否则“c”将为 0。简单的 SQL case 语句是:
(CASE WHEN a IS NULL AND b = 0 THEN 1 ELSE 0 END) AS C
Run Code Online (Sandbox Code Playgroud)
所述期望的输出是这样的:
a b c
-----------
0 NaN 0.0 1
1 2.0 0.0 0
2 NaN 1.0 0
Run Code Online (Sandbox Code Playgroud)
我的(错误)尝试:
df['c'] = np.where(df['a']==np.nan & df['b'] == 0, 1, 0)
Run Code Online (Sandbox Code Playgroud)
许多谢谢。
小智 9
要对条件进行更多控制,请使用 np.select。与 case when 非常相似,可用于放大多个输出。
df['c'] = np.select(
[
(df['a'].isnull() & (df['b'] == 0))
],
[
1
],
default=0 )
Run Code Online (Sandbox Code Playgroud)
你就快到了,而是使用np.where(df['a'].isnull() & (df['b'] == 0), 1, 0)空检查。
或者,
In [258]: df['c'] = (df['a'].isnull() & (df['b'] == 0)).astype(int)
In [259]: df
Out[259]:
a b c
0 NaN 0.0 1
1 2.0 0.0 0
2 NaN 1.0 0
Run Code Online (Sandbox Code Playgroud)