私は以下のデータフレームを持っています。Pandasを使用して別のデータフレームの情報からデータフレームをフィルタリングする
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]