2017-03-08 6 views
1

は、私は特定の列がいくつかの値例えばすべての列が等しい場合、データフレームから行を削除する方法はありますか?

df = df.drop(df[<some boolean condition>].index) 

が、列は全て等しくなっている場合、どのように行をドロップしないに等しい場合は、行を削除する方法を理解できますか?列名を指定せずにこれを行う方法はありますか?あなたが行をループにapply方法を使用し、それぞれが一意の値を含んでいるかどうかを示す論理シリーズを作成し、対応する行を削除するブールシリーズを使用することができ

答えて

1

df[df.apply(lambda r: r.nunique() != 1, 1)] 

df = pd.DataFrame({"A": [1,2,3,3,3,4,5], "B": [1,3,4,4,3,5,1]}) 
In [867]: 

df[df.apply(lambda r: r.nunique() != 1, 1)] 
Out[867]: 
    A B 
1 2 3 
2 3 4 
3 3 4 
5 4 5 
6 5 1 
1

ちょうどに対する最初の列を比較することができ.eqを使用してaxis=0を指定し、~を使用して結果と反転にallを呼び出すDF全体:

In [158]: 
df = pd.DataFrame({'a':np.arange(5), 'b':[0,0,2,2,4]}) 
df 

Out[158]: 
    a b 
0 0 0 
1 1 0 
2 2 2 
3 3 2 
4 4 4 

In [159]:  
df[~df.eq(df['a'], axis=0).all(axis=1)] 

Out[159]: 
    a b 
1 1 0 
3 3 2 

あなたが見ればブールマスク:

In [161]: 
df.eq(df['a'], axis=0).all(axis=1) 

Out[161]: 
0  True 
1 False 
2  True 
3 False 
4  True 
dtype: bool 

In [160]: 
df.eq(df['a'], axis=0) 

Out[160]: 
     a  b 
0 True True 
1 True False 
2 True True 
3 True False 
4 True True 

あなたはそれがとてもall(axis=1)を呼び出す条件を満たした行に対して真で見ることができますは、1-Dブールマスクを返します。

関連する問題