Pandas 相当于 SQL case when 语句来创建新变量

新手上路,请多包涵

我有这个 df:

 data = np.array([[np.nan, 0], [2, 0], [np.nan, 1]])
df = pd.DataFrame(data=data, columns = ['a', 'b'])

看起来像这样:

      a    b
    --------
0   NaN  0.0
1   2.0  0.0
2   NaN  1.0

我的 目标 是创建第三列“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

所需的输出 是这样的:

      a    b   c
    -----------
0   NaN  0.0  1
1   2.0  0.0  0
2   NaN  1.0  0

我的(错误的)尝试:

 df['c'] = np.where(df['a']==np.nan & df['b'] == 0, 1, 0)

很多谢谢。

原文由 Antonio Serrano 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 525
2 个回答

你快到了,而不是使用 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

原文由 Zero 发布,翻译遵循 CC BY-SA 3.0 许可协议

要对条件进行更多控制,请使用 np.select。与 when 的情况非常相似,可用于放大多个输出。

 df['c'] = np.select(
[
    (df['a'].isnull() & (df['b'] == 0))
],
[
    1
],
default=0 )

原文由 vishnu_tushaar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题