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

如何在Pandas中按指定字符串的精确组合提取DataFrame行

解决方案

要精确筛选出sig列仅包含指定字符串(此处为301、302、303)的行,不管字符串的组合顺序,同时排除包含其他额外字符串的行,可按以下步骤实现:

  1. 定义允许的字符串集合:

    allowed_sigs = {'301', '302', '303'}
    
  2. 生成筛选掩码:
    对sig列的每个值按空格分割,将分割后的字符串转为集合,判断该集合是否是允许集合的子集(即所有元素都属于允许列表,无额外字符串):

    mask = df['sig'].str.split().apply(lambda x: set(x).issubset(allowed_sigs))
    
  3. 筛选DataFrame:
    用掩码过滤出符合条件的行:

    result = df[mask]
    

完整代码示例

import pandas as pd

df = pd.DataFrame()
df['sig'] = ['301','302','303','405','405 409','302 301','303 301','405','560','309','301 302 303','303 304','305','305 304 303 302 301', '555','565','301 302 303 304']
df['val'] = [45,25,1,54,12,51,52,1,4,152,786,145,1,555,7595,77,89]

allowed_sigs = {'301', '302', '303'}
mask = df['sig'].str.split().apply(lambda x: set(x).issubset(allowed_sigs))
result = df[mask]

print(result)

输出结果

sig  val
0          301   45
1          302   25
2          303    1
5      302 301   51
6      303 301   52
10 301 302 303  786

说明

  • 避免使用str.contains这类模糊匹配方法,这类方法会误选包含目标字符串但同时带有其他额外字符串的行(比如301 302 303 304)。
  • 利用集合的issubset方法可以严格确保每行sig的所有元素都属于允许的集合,完全符合精确组合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:15:35