【问题标题】:Evaluating boolean expression across Pandas DataFrame跨 Pandas DataFrame 评估布尔表达式
【发布时间】:2015-02-28 03:43:56
【问题描述】:

我有一个 pandas 数据帧“数据”,其中的列包括“cond1”、“cond2”、“cond3”、“cond4”、“cond5”、“cond6”、“cond7”,每个列都包含 True/False

我想添加另一列,table["condMet"],它将包含 True/False,具体取决于是否满足所有 7 个条件。

目前我有这个可以达到这个目的:

data["condMet"] = (data.cond1 == True) & (data.cond2 == True) &    (data.cond3     == True) & (data.cond4 == True) & (data.cond5 == True) & (data.cond6 == True) &  (data.cond7 == True)

有没有更简单的方法来做到这一点?例如。我只能通过这样做来选择这些列

data.iloc[:,5:12]

我现在如何将其分割为仅包含所有列都为 TRUE 的行?

【问题讨论】:

  • data.ix[data.condMet, 5:12]
  • @lowtech:他想要的是一种更简单的方法来创建condMet

标签: python pandas


【解决方案1】:

如果您有一个所有列都是布尔值的 DataFrame(就像您在问题末尾提到的切片一样,您可以将 all 按行应用于它:

d = data.iloc[:, 5:12]
d[d.all(axis=1)]

这将选择所有列都具有布尔真值的行。

如果您只想要告诉您是否包含行的布尔列,那就是d.all(axis=1)

【讨论】:

  • d[d.all(axis=1)] 或某些变体对于大帧可能更快。
  • @DSM:哎呀,你说得对,我忘了all 是一种可用的方法。我编辑了我的答案。
  • 好的,这将选择适当的行,现在如何创建一个新列 data["condMet"],根据每一行是否在此子集中显示 True 或 False?
  • @baconwichsand:这只是该表达式中的d.all(axis=1) 部分。 (我编辑了我的答案以提及这一点。)
猜你喜欢
  • 2013-12-15
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多