【问题标题】:Pandas create column based on evaluation of another column with multiple criteriaPandas 基于对具有多个条件的另一列的评估创建列
【发布时间】:2018-08-03 23:33:17
【问题描述】:

我想根据使用 pandas 对另一列的评估创建一列布尔值。理想情况下,我想使用与我复制的语法类似的语法,但如果这不可能,我愿意接受其他建议。

df 是一个熊猫数据框。 AggRow 是一列整数数据。

所以,我有 AggRow 的数据,这些数据具有一系列值。我可以根据单个标准成功创建一个新列 conditionmet,就像这样,如果我希望 conditionmet 在 AggRow 小于或等于 6001 的地方为 True:

conditionmet = df['AggRow'] <= 6001

但是,如果 AggRow

conditionmet = ((df['AggRow'] <= 6001) | ((df['AggRow'] >= 10001) & (df['AggRow'] <= 10009)))

如何在 AggRow = 10001 和

【问题讨论】:

  • 我在这里复制了这个问题,这个逻辑 conditionmet = ((df['AggRow'] <= 6001) | ((df['AggRow'] >= 10001) & (df['AggRow'] <= 10009))) 按预期工作。您是否尝试过检查 .dtypes 或其他一些可能性,以了解为什么这不起作用?
  • @joaoavf 感谢您确认它对您有用。事实上,问题出在数据上。 AggRow 已填充为其一些先前值的总和,因此例如,在我期望 aggrow 等于 10002 的地方,它没有。

标签: pandas conditional


【解决方案1】:

尝试使用 .loc,这将在满足您的条件的地方使用 True 填充“conditionmet”列。

df.loc[(df['AggRow'] <= 6001)
      |((df['AggRow'] <= 10009)
       &(df['AggRow'] >= 10001)), 'conditionmet'] = 'True'

如果您愿意,也可以用“False”填充 NaN(也就是不满足上述条件的每条记录):

df.fillna('False')

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2015-03-10
    • 2021-03-02
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多