我有两个pd DataFrames
,我想通过检查另一个dataFrame
的同一行中是否存在几列的值来过滤其中一个。
示例DataFrame1:
CHROM POS ALT Col4
r1 X 22 A 4
r2 1 43 T 6
r3 3 100 C 7
r4 15 22 A 13
DataFrame 2:
ALT chrom Col3 Col4 start
r1 A X 25 26 22
r2 A 1 18 19 26
r3 C 3 99 10 100
r4 T 1 100 88 43
我想通过匹配ALT chrome和start列与dataframe 2
中的Alt CHROM和POS列来过滤dataframe one
。我只想保留与所有3列匹配的行。
到目前为止,我已经使用for循环完成了此操作,但是它相当慢。有没有办法用熊猫函数做到这一点?
p = []
for x in dataframe1.index:
for y in dataframe2.index:
if (dataframe2.chrom[y] == str(dataframe1.CHROM[x])) and (datafrmae2.start[y] == dataframe1.POS[x]) and (dataframe2.Alt[y] == dataframe1.ALT[x]):
p.append(y)
dataframe2_filt = dataframe2[dataframe2.index.isin(p)]
答案 0 :(得分:0)
您可以同时连接两个数据框,并将匹配的行保留在dataframe_1
中:
dataframe2_joined = pd.merge(dataframe_2,
dataframe_1,
left_on=['ALT', 'chrom', 'start'],
right_on=['ALT', 'Chrom', 'POS'],
how='left')
dataframe2_filt = dataframe2_merged[dataframe2_merged.POS.notnull()]