2016-12-01 12 views
2

私はドロップ重複行は

p_id c_id_x c_id_y 
    3  13  13 
    4  45  63 
    37  21  36 
    5  13  13 
    4  15  67 
    34  21  30 

iはc_id_xとc_id_yが同じである行をドロップしたいパンダのデータフレーム内のテーブルを持っています。

(すなわち3 13 135 13 13は、i)は df.drop_duplicates()を使用して試みたが、すべての列が同じではないので、私は動作しません。

(p_id)が異なります。

他の方法がありますか?

+0

'c_id_y'の最後の値が' 21'なので、 'c_id_x'の最後の値は' 21'なので削除する必要がありますか? – jezrael

+0

@jezraelはい、そうでなければなりません。 – Shubham

答えて

3

あなたはboolean indexingを使用することができます。

mask = (df.c_id_x != df.c_id_y) 
print (mask) 

0 False 
1  True 
2  True 
3 False 
4  True 
5  True 
dtype: bool 

print (df[mask]) 
    p_id c_id_x c_id_y 
1  4  45  63 
2 37  21  36 
4  4  15  67 
5 34  21  30 

代わりne!=と別の解決策:

mask = (df.c_id_x.eq(df.c_id_y)) 
print (df[mask]) 
    p_id c_id_x c_id_y 
1  4  45  63 
2 37  21  36 
4  4  15  67 
5 34  21  30 
+0

最後の行の最後の列に30というよりc_id_y = 21と言うのは正しいですが、どうすれば削除できますか? – Shubham

+0

最後の値が '21'の場合、私の解決策が動作します。試してみてください。 – jezrael

+0

これをチャットのディスカッションの中で動かすことができます。 – Shubham

2

使用query

df.query('c_id_x != c_id_y') 

enter image description here

+0

@jezraelが更新されました。 – piRSquared