【发布时间】:2021-02-13 19:25:09
【问题描述】:
我有两个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
数据帧 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 one 中的 Alt CHROM 和 POS 列进行匹配来过滤 dataframe 2。我只想保留与所有 3 列匹配的行。
到目前为止,我已经使用 for 循环完成了此操作,但速度很慢。有没有办法用 pandas 函数做到这一点?
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)]
【问题讨论】:
标签: python pandas function dataframe