如何从DataFrame中提取Sampleid列值末尾匹配向量元素的行
精准匹配DataFrame列末尾与向量元素的行解决方案
没问题!我来帮你搞定这个需求——正好能解决你提到的「有相似子串但只有末尾匹配才算有效样本」的场景。
先模拟一下你的数据场景,方便你对照理解:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ "Sampleid": ["632_CSF_1", "abc_632_CSF_2", "xyz_632_CSF", "def_789_Blood"], "Measurement": [15, 22, 30, 45] }) # 你的目标匹配向量(这里用Python列表模拟) targets = ["632_CSF", "789_Blood"]
核心实现:用str.endswith()精准匹配末尾
pandas的str.endswith()方法就是专门干这个的——它会严格检查字符串是否以指定内容结尾,完美避开那种「子串在中间但末尾不匹配」的无效行。
直接用一行代码就能完成筛选:
# 筛选Sampleid末尾匹配向量任意元素的行 filtered_df = df[df["Sampleid"].str.endswith(tuple(targets))]
运行后你会得到符合要求的结果:
| Sampleid | Measurement |
|---|---|
| xyz_632_CSF | 30 |
| def_789_Blood | 45 |
像你提到的「两个包含632_CSF的样本」,比如632_CSF_1和abc_632_CSF_2,它们的末尾分别是_1和_2,不符合匹配要求,所以会被自动排除,只有真正末尾是632_CSF的xyz_632_CSF会被保留。
适配不同类型的向量
如果你的目标向量是numpy数组而不是普通列表,只需要先转成列表再用:
import numpy as np targets_arr = np.array(["632_CSF", "789_Blood"]) filtered_df = df[df["Sampleid"].str.endswith(tuple(targets_arr.tolist()))]
这样就能轻松拿到你需要的行啦!
内容的提问来源于stack exchange,提问作者Keshav M
相关产品推荐
相关产品推荐

