我知道如何刪除行,如果給定列等於某個值e.g如果所有列彼此相等,如何從數據框中刪除行?
df = df.drop(df[<some boolean condition>].index)
但你如何刪除一個行如果列的值都爲對方?有沒有辦法做到這一點,而不指定列名?
我知道如何刪除行,如果給定列等於某個值e.g如果所有列彼此相等,如何從數據框中刪除行?
df = df.drop(df[<some boolean condition>].index)
但你如何刪除一個行如果列的值都爲對方?有沒有辦法做到這一點,而不指定列名?
您可以使用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
您可以只比較第一列反對整個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