gpt4 book ai didi

python - 使用 Pandas 从另一个数据框中的信息过滤数据框

转载 作者:行者123 更新时间:2023-11-28 22:26:44 25 4
gpt4 key购买 nike

我在下面有一个数据框。

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]

最佳答案

你可以试试这个:

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

关于python - 使用 Pandas 从另一个数据框中的信息过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44571370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com