如何基于合并后pandas DataFrame的两列值按条件新增分类字段
实现方案
首先我们默认你的第三个test DataFrame结构为单列存储待评估检测方法检出的变异ID,示例如下(和你给出的预期结果匹配):
test = pd.DataFrame([['ch1.1234578C>T'], ['ch3.234569A>T']], columns=['test_variant'])
操作步骤
- 先将
test表中所有变异ID转为集合,大幅提升存在性判断的效率 - 用
numpy的向量化条件判断按规则生成Test列,比逐行遍历apply效率高很多,适合大样本量场景
完整实现代码:
import numpy as np # 将test的变异ID转为集合 test_variant_set = set(test['test_variant']) # 按规则生成Test列 comparative['Test'] = np.where( # 条件1:对照为真阳、且待评估检测也检出 → 真阳性 (comparative['CONTROL'] != 'Real negative') & comparative['CONTROL'].isin(test_variant_set), 'True-positive', np.where( # 条件2:对照为真阳、但待评估检测未检出 → 假阴性 (comparative['CONTROL'] != 'Real negative') & ~comparative['CONTROL'].isin(test_variant_set), 'False-negative', np.where( # 条件3:对照为真阴、但待评估检测检出 → 假阳性 (comparative['CONTROL'] == 'Real negative') & comparative['All_common_variants_ID'].isin(test_variant_set), 'False-positive', # 剩余情况:对照为真阴、待评估检测未检出 → 真阴性 'True-negative' ) ) )
运行后输出的comparative表就和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

