2017-03-08 35 views

回答

1

您可以使用apply方法來遍歷行,並指示邏輯系列如果每個包含唯一值,並且使用布爾系列刪除相應的行:

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

您可以只比較第一列反對整個DF使用.eq並指定axis=0和呼籲的結果all和反轉使用~

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 [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布爾面膜:

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 
相關問題