Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果任何行值位于另一个数据帧中,请从数据帧中删除行_Python_Pandas - Fatal编程技术网

Python 如果任何行值位于另一个数据帧中,请从数据帧中删除行

Python 如果任何行值位于另一个数据帧中,请从数据帧中删除行,python,pandas,Python,Pandas,我有两个数据帧 带一列的df1 {0:[1,2,3,4,5,6,7,11]} 具有两个列的df2 {0:[100,4,6,7],1:[1,3,4,7]} 我必须从df1中删除df2中任何列中有值的行 ressult数据帧 df3 = [2,5,11] 堆叠第二个数据帧并对第一列执行isin,然后反转 df1[~df1[0].isin(df2.stack())] 堆叠第二个数据帧并对第一列执行isin,然后反转 df1[~df1[0].isin(df2.stack())] 以下是一种

我有两个数据帧

带一列的df1

{0:[1,2,3,4,5,6,7,11]}
具有两个列的df2

{0:[100,4,6,7],1:[1,3,4,7]}
我必须从df1中删除df2中任何列中有值的行

ressult数据帧

df3 = [2,5,11]

堆叠第二个数据帧并对第一列执行isin,然后反转

df1[~df1[0].isin(df2.stack())]


堆叠第二个数据帧并对第一列执行isin,然后反转

df1[~df1[0].isin(df2.stack())]

以下是一种使用的方法:

以下是一种使用的方法:

您可以使用:

输出:


对于大型数据帧,我已经完成了以下简单的基准测试:

您可以使用:

输出:


对于大型数据帧,我已经完成了以下简单的基准测试:


你能告诉我它在内存方面对大数据帧扫描有多好吗?你能告诉我它在内存方面对大数据帧扫描有多好吗?你能告诉我它在内存方面对大数据帧扫描有多好吗dataframes@aryansingh我已经做了一个简单的基准测试,你可以进一步检查我的更新在df1[~df1[0].isin(df2.values.flatte())]中,如果我的df1有超过1个列,那么可以给它~df1[[0,1]]这个功能吗?我问了另一个问题:你能告诉我它在内存方面对大型应用程序有多好吗dataframes@aryansingh我已经做了一个简单的基准测试,你可以在df1[~df1]中检查我的更新[0].isin(df2.values.flatte())]如果i df1有多个列,是否可以将其指定为~df1[[0,1]]这行吗?我问了另一个问题:
df1[~df1.squeeze().isin(df2.stack())]

    0
1   2
4   5
7  11
df1[~df1[0].isin(df2.values.flatten())]
import numpy as np

from simple_benchmark import BenchmarkBuilder
b = BenchmarkBuilder()

@b.add_function()
def anky_91(t):
    df1, df2 =  t
    df1[~df1[0].isin(df2.stack())]

@b.add_function()
def kederrac(t):  
    df1, df2 =  t
    df1[~df1[0].isin(df2.values.flatten())]

@b.add_function()   
def yatu(t):
    df1, df2 =  t
    df1[~df1.squeeze().isin(df2.stack())]


@b.add_arguments('NUmber of rows ind df')
def argument_provider():
    for exp in range(2, 18):
        size = 2**exp
        df1 = pd.DataFrame(np.random.randint(0, size // 10 or 10,size= (size , 1)))
        df2 = pd.DataFrame(np.random.randint(0, size // 10 or 10 ,size=(size , 2)))
        yield size, (df1, df2)

r = b.run()
r.plot()