【问题标题】:How to get boolean value in column based on a range in pandas如何根据熊猫的范围在列中获取布尔值
【发布时间】:2020-06-21 07:08:47
【问题描述】:
cf1p2['Age Check'] = (cf1p2['Age']>18 & cf1p2['Age']<60)

我想检查 cf1p2['Age'] 是否介于 18 和 60 之间,并且需要 cf1p2['Age Check'] 列中的结果

当前代码给出以下错误。

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

【问题讨论】:

  • 请发布具有预期结果的数据。以此为指导:stackoverflow.com/questions/20109391/…
  • cf1p2['Age Check'] = cf1p2['Age'].between(18, 60, inclusive=False)
  • 尝试cf1p2.loc[(cf1p2['Age']&gt;18) &amp; (cf1p2['Age']&lt;60), 'new_col'] = value 您也可以使用np.where 基本上将数据框转换为真正的假布尔值,您需要将其作为数据框的表达式访问或返回,或使用pandas/numpy 方法将系列/数据框转换为布尔值
  • 这能回答你的问题吗? pandas equivalent of np.where

标签: python pandas


【解决方案1】:

您好,我有一个解决方案:

df['Age Check'] = np.where(df['age']>=18 & df['age']<=60, 'yes', 'no')

如果有帮助请告诉我!

【讨论】:

    【解决方案2】:

    您错过了一对用于分隔两个布尔值的括号。 试试看:cf1p2['Age Check'] = (cf1p2['Age']&gt;18) &amp; (cf1p2['Age']&lt;60)

    【讨论】:

      【解决方案3】:

      考虑这个例子:

      df:

          A   B   C   D   E   F   G
      0   52  41  23  53  22  22  39
      1   48  49  58  48  45  57  32
      2   38  49  48  25  32  22  27
      3   46  34  43  52  50  32  30
      4   59  47  49  22  53  31  38
      5   49  49  58  37  28  31  34
      6   31  29  28  41  39  36  47
      7   34  55  52  39  32  25  55
      8   34  21  48  22  22  53  42
      9   44  23  57  52  29  54  43
      

      df['age_check'] = (df['A'] > 58) & (df['A'] < 60)
      df
      

      结果:

      A   B   C   D   E   F   G   age_check
      0   52  41  23  53  22  22  39  False
      1   48  49  58  48  45  57  32  False
      2   38  49  48  25  32  22  27  False
      3   46  34  43  52  50  32  30  False
      4   59  47  49  22  53  31  38  True
      5   49  49  58  37  28  31  34  False
      6   31  29  28  41  39  36  47  False
      7   34  55  52  39  32  25  55  False
      8   34  21  48  22  22  53  42  False
      9   44  23  57  52  29  54  43  False
      

      代替

      cf1p2['Age Check'] = (cf1p2['Age']>18 & cf1p2['Age']<60)
      

      应该是

      cf1p2['Age Check'] = (cf1p2['Age']>18) & (cf1p2['Age']<60)
      

      【讨论】:

        【解决方案4】:

        使用Series.between:

        cf1p2['Age Check'] = cf1p2['Age'].between(18, 60, inclusive=False)
        

        如果您在条件周围添加一些括号,您自己的解决方案也应该有效:

        cf1p2['Age Check'] = (cf1p2['Age'] > 18) & (cf1p2['Age'] < 60)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2020-07-30
          • 2017-08-25
          • 1970-01-01
          • 2020-11-26
          • 2017-10-14
          • 1970-01-01
          相关资源
          最近更新 更多