如何筛选DataFrame中Ensembl值存在于Revel_Transcripts列的行?
筛选DataFrame中Ensembl值存在于对应Revel_Transcripts的行
我有一个包含多列的DataFrame,以下是相关列Revel_Transcripts和Ensembl的字典形式(截取前30行):
IGV_table[["Revel_Transcripts", "Ensembl"]].head(30).to_dict() {'Revel_Transcripts': {0: 'ENST00000438426', 1: 'ENST00000438426', 2: 'ENST00000438426', 3: 'ENST00000438426', 4: 'ENST00000438426', 5: 'ENST00000438426', 6: 'ENST00000438426', 7: 'ENST00000438426', 8: 'ENST00000438426', 9: 'ENST00000438426', 10: 'ENST00000438426', 11: 'ENST00000438426', 12: 'ENST00000438426', 13: 'ENST00000438426', 14: 'ENST00000438426', 15: 'ENST00000438426', 16: 'ENST00000438426', 17: 'ENST00000438426', 18: 'ENST00000438426', 19: 'ENST00000438426', 20: 'ENST00000438426', 21: 'ENST00000438426;ENST00000318560', 22: 'ENST00000438426;ENST00000318560', 23: 'ENST00000438426;ENST00000318560', 24: 'ENST00000438426;ENST00000318560', 25: 'ENST00000438426;ENST00000318560', 26: 'ENST00000438426;ENST00000318560', 27: 'ENST00000438426;ENST00000318560', 28: 'ENST00000438426;ENST00000318560', 29: 'ENST00000438426;ENST00000318560'}, 'Ensembl': {0: 'ENST00000318560', 1: 'ENST00000318560', 2: 'ENST00000318560', 3: 'ENST00000318560', 4: 'ENST00000318560', 5: 'ENST00000318560', 6: 'ENST00000318560', 7: 'ENST00000318560', 8: 'ENST00000318560', 9: 'ENST00000318560', 10: 'ENST00000318560', 11: 'ENST00000318560', 12: 'ENST00000318560', 13: 'ENST00000318560', 14: 'ENST00000318560', 15: 'ENST00000318560', 16: 'ENST00000318560', 17: 'ENST00000318560', 18: 'ENST00000318560', 19: 'ENST00000318560', 20: 'ENST00000318560', 21: 'ENST00000318560', 22: 'ENST00000318560', 23: 'ENST00000318560', 24: 'ENST00000318560', 25: 'ENST00000318560', 26: 'ENST00000318560', 27: 'ENST00000318560', 28: 'ENST00000318560', 29: 'ENST00000318560'}}
需求
保留Ensembl列的值存在于对应行Revel_Transcripts列中的行。其中Revel_Transcripts列的值可能为单个ID或多个用分号分隔的ID,Ensembl列仅包含单个ID。
解决方法
使用apply逐行检查Ensembl的值是否在Revel_Transcripts分割后的ID列表中,以此作为筛选条件:
# 执行筛选 filtered_df = IGV_table[IGV_table.apply(lambda row: row['Ensembl'] in row['Revel_Transcripts'].split(';'), axis=1)] # 查看筛选后的相关列结果 print(filtered_df[["Revel_Transcripts", "Ensembl"]])
预期结果
Revel_Transcripts Ensembl 21 ENST00000438426;ENST00000318560 ENST00000318560 22 ENST00000438426;ENST00000318560 ENST00000318560 23 ENST00000438426;ENST00000318560 ENST00000318560 24 ENST00000438426;ENST00000318560 ENST00000318560 25 ENST00000438426;ENST00000318560 ENST00000318560 26 ENST00000438426;ENST00000318560 ENST00000318560 27 ENST00000438426;ENST00000318560 ENST00000318560 28 ENST00000438426;ENST00000318560 ENST00000318560 29 ENST00000438426;ENST00000318560 ENST00000318560
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

