You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用一行代码筛选DataFrame:保留指定开头Position且排除特定值

问题场景

现有如下DataFrame:

import pandas as pd
df = pd.DataFrame([['Jim', 'CF'], ['Toby', 'RW'], ['Joe', 'RWF'], ['Tom', 'RAMF'], ['John', 'RWB']], columns=['Name', 'Position'])

需要筛选出仅包含Position为'RW'、'RWF'或'RAMF'的行,要求用一行代码实现。

原实现用了两行代码:

RW = df[df['Position'].str.startswith(('RW', 'RAMF', 'RWF'), na = False)]
RW = RW[RW['Position'].str.contains('RWB')==False]

问题在于用str.startswith('RW')会误包含'RWB',因此需要第二行排除该值,现在要合并为一行代码。

解决方案

这里提供几种简洁的一行代码实现方式:

方法1:精确匹配(最推荐)

直接指定要保留的Position值列表,精确匹配完全不会出现误判:

RW = df[df['Position'].isin(['RW', 'RWF', 'RAMF'])]

方法2:合并原筛选条件

把原两行的筛选逻辑用逻辑与(&)拼接,注意每个条件要单独加括号:

RW = df[(df['Position'].str.startswith(('RW', 'RAMF', 'RWF'), na=False)) & (df['Position'] != 'RWB')]

方法3:正则精准匹配

用正则表达式限定字符串结尾,避免匹配到RWB这类相似值:

RW = df[df['Position'].str.match(r'^(RW$|RWF$|RAMF$)', na=False)]

正则里的$表示匹配到字符串末尾,确保只有完全符合的目标值会被选中。

内容的提问来源于stack exchange,提问作者codemachine98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:37:45