同じ行が別のデータフレームに存在する場合、Pandas データフレームの行を削除するにはどうすればよいでしょうか? 質問する

同じ行が別のデータフレームに存在する場合、Pandas データフレームの行を削除するにはどうすればよいでしょうか? 質問する

2 つのデータフレームがあります:

 df1 = row1;row2;row3
 df2 = row4;row5;row6;row2

出力データフレームに df1 内の一意の行のみが含まれるようにします。つまり、

df_out = row1;row3

これを最も効率的に取得するにはどうすればよいでしょうか?

このコードは、2 つの for ループを使用して、必要なことを実行します。

a = pd.DataFrame({0:[1,2,3],1:[10,20,30]})
b = pd.DataFrame({0:[0,1,2,3],1:[0,1,20,3]})

match_ident = []
for i in range(0,len(a)):
    found=False
    for j in range(0,len(b)):
        if a[0][i]==b[0][j]:
            if a[1][i]==b[1][j]:
                found=True
    match_ident.append(not(found))

a = a[match_ident]

ベストアンサー1

あなたは使用することができますmergeパラメータindicatorと外部結合を使用して、queryフィルタリングしてヘルパー列を削除するdrop:

DataFrames はすべての列で結合されるため、onパラメータは省略できます。

print (pd.merge(a,b, indicator=True, how='outer')
         .query('_merge=="left_only"')
         .drop('_merge', axis=1))
   0   1
0  1  10
2  3  30

おすすめ記事