【问题标题】:list of booleans to slice DataFrame用于切片 DataFrame 的布尔值列表
【发布时间】:2020-11-03 02:41:16
【问题描述】:

我正在尝试找到一种更少手动、更方便的方法来根据多个布尔条件对 Pandas DataFrame 进行切片。为了说明我所追求的,这里有一个简化的例子

df = pd.DataFrame({'col1':[True,False,True,False,False,True],'col2':[False,False,True,True,False,False]})

假设我对 DataFrame 的子集感兴趣,其中 'col1' 和 'col2' 都是 True。我可以通过运行找到它:

df[(df['col1']==True) & (df['col2']==True)]

这在像这个这样的小维度示例中是足够易于管理的,但是真正的示例最多可以有一百列,所以与其像上面那样将一个长布尔值串在一起,我宁愿阅读对列表感兴趣,例如

['col1','col2']

并选择列出的那些列True

【问题讨论】:

  • df.loc[df[magic_list_of_columns].all(axis='columns')]

标签: python pandas boolean


【解决方案1】:

如果您需要所有列:

df[df.all(axis=1)==True]

如果您有列列表:

df[df[COLS].all(axis=1)==True]

相反的就做False:

df[df.all(axis=1)==False]

【讨论】:

  • 我认为相反的情况不是我所追求的。从我原来的例子中,我会寻找索引 1 和 4
  • 详细说明,在一种情况下a)我想对列列表的值为“True”的行进行切片,而在另一种情况下,b)它们为“False”跨度>
  • 我认为应该是:df[df[COLS].any(axis=1)==False]
  • 最后一个case应该是df[~df.all(axis=1)]
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 2018-03-27
  • 2015-05-30
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多