我想根据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
但是,我的数据帧非常大(数百万行),因此此操作需要大量时间。还有其他更有效的方法来获得理想的结果吗?
答案 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()