2016-05-16 16 views
2

I持ってこれらの2つのデータフレーム:私は組み合わせに基づいてdf_testからdf_merge内にあるすべてのものを、削除したい削除交差点

df_test 
    dimension1_id dimension2_id dimension3_id dimension4_id dimension5_id \ 
0   -1   -1   -1   -1   -1 
1 1177314888  238198786 5770904146  133207291   Exact 
2 1177314888  238198786 5770904266 18395155770   Exact 
3 1177314888  238198786 5770904266 19338210057   Exact 
4 1177314888  238198786 5770904266 30907903234   Exact 

df_merge 
dimension1_id dimension2_id dimension3_id dimension4_id dimension5_id \ 
0   -1   -1   -1   -1   -1 
1 1177314888  238198786 5770904146  133207291   Exact 

dimension1_id,dimension2_id,dimension3_id,dimension4_idおよびdimension5_idである。

これは私のコードです:

df_test = df_test[ 
(df_test['dimension5_id'].isin(df_merge.dimension5_id) == False) & 
(df_test['dimension4_id'].isin(df_merge.dimension4_id) == False) &        (df_test['dimension3_id'].isin(df_merge.dimension3_id) == False) &        (df_test['dimension2_id'].isin(df_merge.dimension2_id) == False) & 
(df_test['dimension1_id'].isin(df_merge.dimension1_id) == False) 
] 

しかし、このコードは、空のデータフレームを返します。 df_testから1行目と2行目を削除するにはどうすればよいですか?

答えて

4

論理インデックスを使用して、直接比較を適用して、必要な行をマスクすることができます。この場合、あなたはdf_mergeであるdf_testの値をチェックすることができます。

df_test.isin(df_merge) 

マスクとして結果の論理インデックスの行為を:私たちは、単純に否定することができますので

dimension1_id dimension2_id dimension3_id dimension4_id dimension5_id  \ 
0   True   True   True   True   True True 
1   True   True   True   True   True True 
2   False   False   False   False   False False 
3   False   False   False   False   False False 
4   False   False   False   False   False False 

True値は、一致する行にマッピング~を使用してdf_mergeにある行のみを返すインデックスは、df_test

df_test[~df_test.isin(df_merge)]