【问题标题】:Using np.where returns error after using .any() [duplicate]使用 .any() 后使用 np.where 返回错误 [重复]
【发布时间】:2020-02-06 05:03:55
【问题描述】:

我正在处理需要根据多个条件创建大量标志的数据框。我正在使用np.where,但现在我遇到了这个错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

为了可复制性和简单性,我仅将产生错误的部分代码与使用的列一起分享。 正在使用的数据框:

     Data  Uniques  day_a1  day_a2  day_a3
0       1        1       3     NaN     NaN
1       2        2      14    15.0     NaN
2       2        1      10    10.0     NaN
3       3        1      10    10.0    10.0
802     2        2      12     NaN    29.0
806     1        1      29     NaN     NaN

产生错误的代码:

df['flag_3.3.3.1.1'] = np.where(
    (
        (df['Data'] == 3) & 
        (df['day_a1'] != 10) & 
        (df['Uniques'] == 3) & #I ran this separately and it was fine
        (df['day_a1'] > 27 or df['day_a1'] < 4).any()),'flag',np.nan)

or 之后传递.any() 之后我似乎仍然有问题。

【问题讨论】:

  • idownvotedbecau.se/nodebugging 把你的长长的陈述分成几部分;如有必要,多个语句。看看每个部分产生了什么。
  • 这是一个真正复杂的操作集,你有inside你的函数调用。您是否考虑过将其拆分为多个语句作为准备?将帮助我们读者和您自己更好地了解实际情况
  • 解决这个问题的魔术师是谁?非常感谢!我不确定如何在不破坏代码的情况下拆分它们(我真的试过了)。
  • a= (df['Data'] == 3); b=(df['day_a1'] != 10);等等; x=a &amp; b &amp; c &lt;etc&gt;; np.where(x, '3.3.3.1.1', nan).
  • @CeliusStingher 不客气 :) 如果手动换行代码太棘手,不妨考虑在您的代码上运行 black。虽然编写代码以使行结束时不超过 80-100 个字符通常也是一个好的开始

标签: python pandas numpy where-clause


【解决方案1】:

尝试替换

(df['day_a1'] > 27 or df['day_a1'] < 4)

通过

((df['day_a1'] > 27) | (df['day_a1'] < 4))

注意| 的使用和优先级的附加括号。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2021-04-22
  • 2019-06-13
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多