首页 > 解决方案 > Pandas:具有多个条件的子集的子集

问题描述

我需要使用多个条件获取以下内容的子集:

  1. 事件类型必须包含字符串“Outreach”
  2. AND 任何其他字段都可以包含字符串“STEM” - 不区分大小写。

数据样本:

Title         Event Type    Presenter    Description    Tags
STEM event    STEM          Gloria       Bubbles        Craft
Robots        Outreach      STEM - John  EV3            Bots
School STEM   Outreach      Billy        Robots         Craft

代码:

cond = df['Event Type'].str.contains('Outreach')
stemA = df[cond]

这让我得到了所有的外展活动。

cond = df['Event Type'].str.contains('Outreach') & (df['Presenter'].str.contains('STEM') | df['Tags'].str.contains('STEM') | df['Description'].str.contains('STEM') | df['Title'].str.contains('STEM'))
stem[cond]

我希望有一个类似 grep 的解决方案。上面的内容比grep在命令行上得到的要少,而且我知道从查看数据来看这个结果是错误的。

标签: pandasgrepjupyter

解决方案


IIUC,这应该适合你

cols_to_include = df.columns[df.columns != 'Event Type']
a = df[cols_to_include].astype(str).sum(axis=1)
df[df['Event Type'].str.contains('Outreach') & (a.str.contains('STEM', regex=True))]

推荐阅读