![](/img/trans.png)
[英]how to check if a list of column in not present in a dataframe pandas
[英]Pandas: How to check if any of a list in a dataframe column is present in a range in another dataframe?
我正在尝试比较两个生物信息学DataFrames(一个具有转录起始和最终基因组位置,一个具有表达数据)。 我需要检查一个DataFrame中的任何位置列表是否存在于另一个DataFrame中的起始位置和结束位置定义的范围内,返回它们匹配的行/ ID。
我已经尝试了许多内置方法(.isin,.where,.query,),但通常会因为列表不可用而卡住。 我还尝试了一个带有iterrows和itertuples的嵌套for循环,这非常慢(我的实际数据集是数千个条目)。
tss_df = pd.DataFrame(data={'id':['gene1','gene2'],
'locs':[[21,23],[34,39]]})
exp_df = pd.DataFrame(data={'gene':['geneA','geneB'],
'start': [15,31], 'end': [25,42]})
我想找到tss_df中id为'gene1'的行的位置(locs)与exp_df中的'geneA'匹配。
输出将是这样的:
output = pd.DataFrame(data={'id':['gene1','gene2'],
'locs': [[21,23],[34,39]],
'match': ['geneA','geneB']})
编辑:根据下面的评论,我尝试使用merge_asof
:
pd.merge_asof(tss_df,exp_df,left_on='locs',right_on='start')
这给了我一个不兼容的合并键错误,我怀疑是因为我将列表与整数进行比较; 所以我拆分了locs中的第一个值:
tss_df['loc1'] = tss_df['locs'][0]
pd.merge_asof(tss_df,exp_df,left_on='loc1',right_on='start')
这似乎适用于我的测试数据,但我需要尝试使用我的实际数据!
根据下面的评论,我尝试使用merge_asof
:
pd.merge_asof(tss_df,exp_df,left_on='locs',right_on='start')
这给了我一个不兼容的合并键错误,我怀疑是因为我将列表与整数进行比较; 所以我拆分了locs中的第一个值:
tss_df['loc1'] = tss_df['locs'][0]
pd.merge_asof(tss_df,exp_df,left_on='loc1',right_on='start')
这似乎适用于我的测试数据!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.