任意の行の値が別のデータフレームである場合にデータフレームから行を削除します

アーリア・シン:

私は2つのデータフレームを持っています

1列とDF1

{0:[1,2,3,4,5,6,7,11]}

2 COLとDF2

{0:[100,4,6,7],1:[1,3,4,7]}

私はDF2のいずれかの列の値でDF1から行を削除する必要があります

ressultデータフレーム

df3 = [2,5,11]
kederrac:

あなたが使用することができpandas.DataFrame.isinを

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()

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=402441&siteId=1