在没有isin()的情况下基于其他df的列过滤数据帧

时间:2019-01-27 01:21:37

标签: python pandas dataframe

我想根据df2的列过滤df1。我只需要将行保留在df1中(如果它们出现在df2中)。我尝试像这样使用isin()

df1 = pd.DataFrame({'A' : [5,6,3,6,3,4]})

df2 = pd.DataFrame({'B' : [0,0,3,6,0,0]})

df1[df1['A'].isin(df2['B'])]

给出所需的df:

    A
    6
    3
    6
    3

但是,我的数据帧非常大(数百万行),因此此操作需要大量时间。还有其他更有效的方法来获得理想的结果吗?

1 个答案:

答案 0 :(得分:2)

如果您尝试退出联接然后过滤掉NA,该怎么办。我只是生成了两个较大的数据帧(一个为1000万,另一个为400万),在具有8GB RAM的普通笔记本电脑上,它运行了几秒钟。示例如下。希望对您有所帮助。

df1 = pd.DataFrame({'A' : range(10000000), "B": range(0, 20000000, 2)})
df2 = pd.DataFrame({'C' : range(4000000), "D": range(0, 8000000, 2)})
df = pd.merge(df1, df2, how="left", left_on="B", right_on="C")
df = df[df["C"].notnull()].copy()