Python 使用Pandas从另一个数据帧中的信息筛选数据帧

Python 使用Pandas从另一个数据帧中的信息筛选数据帧,python,pandas,filter,Python,Pandas,Filter,我有一个下面的数据框 df = pd.DataFrame(columns=['Chromosome', 'Start','End'], data=[ ['chr1', 2000, 3000], ['chr1', 500, 1500], ['chr3', 3000, 4000], ['chr5', 4000, 5000], ['chr17', 9000, 10000],

我有一个下面的数据框

df = pd.DataFrame(columns=['Chromosome', 'Start','End'],
     data=[
           ['chr1', 2000, 3000],
           ['chr1', 500, 1500],
           ['chr3', 3000, 4000],
           ['chr5', 4000, 5000],
           ['chr17', 9000, 10000],
           ['chr19', 1500, 2500]
           ])
我有一个探测数据帧,如下所示

probes = pd.DataFrame(columns=['Probe', 'Chrom','Position'],
     data=[
           ['CG999', 'chr1', 2500],
           ['CG000', 'chr19, 2000],
           ])
我想过滤df中包含探针染色体的行,并且探针位置在其开始和结束编号之间,然后将探针名称添加到df中的新列/字段中。所需输出如下:

    Probe    Chrom    Start    End
0   CG999    chr1     2000     3000
5   CG000    chr19    1500     2500
我下面的尝试有效,但不会将探测名称放入探测列中,并且依赖于循环探测数据。必须有一种更有效的方法来做到这一点

all_indexes = []

# fake2.tsv is the aforementioned probes dataframe
with open('fake2.tsv') as f:
    for x in f:
        probe, chrom, pos = x.rstrip("\n").split("\t")
        row = df[(df['Chromosome'] == chrom) & ((int(pos) > df['Start']) & (int(pos) < df['End']))]
        all_indexes.append(t.index.tolist())

all_t = [y for x in all_t for y in x]
df.iloc[all_indexes]
所有索引=[]
#fake2.tsv是前面提到的探测数据帧
以open('fake2.tsv')作为f:
对于f中的x:
探头,色度,位置=x.rstrip(“\n”).分体式(“\t”)
行=df[(df['chrome']==chrom)和((int(pos)>df['Start'])和(int(pos)
我刚刚遇到了同样的问题,显然pandas中没有内置的解决方案。但是,您可以在以下线程上使用解决方案:

您可以尝试以下方法:

df.merge(probes, left_on='Chromosome', right_on='Chrom').query('Start < Position < End')
  Chromosome  Start   End  Probe  Chrom  Position
0       chr1   2000  3000  CG999   chr1      2500
2      chr19   1500  2500  CG000  chr19      2000