pandas - Pandas:具有多个条件的子集的子集
问题描述
我需要使用多个条件获取以下内容的子集:
- 事件类型必须包含字符串“Outreach”
- 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
在命令行上得到的要少,而且我知道从查看数据来看这个结果是错误的。
解决方案
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))]
推荐阅读
- python - 让python绘制两个不同比例的不同x轴
- javascript - 为什么 document.anchors 命令不使用第一个链接作为索引 0 而不是第二个链接?
- javascript - 是否有javascript通用链接方法
- javascript - 为什么我在进行新渲染时丢失了我的 chart.js
- linux - Bash 或 Awk 脚本用于合并 X 个字段匹配的行,同时在不匹配的字段中创建范围
- python-3.x - 从由其他列分区的列中返回具有第一个值的记录
- laravel - Laravel 7 身份验证不持久
- java - 将子集的总和转换为可以并行执行的流
- javascript - 尝试为“map()”遍历的每个图像添加“onClick”并显示模态
- ruby-on-rails - Heroku 在未定义时设置 SECRET_KEY_BASE