2015-11-03 59 views
2

我想刪除數據框中重複的相鄰行。我試圖用df[df.shift() != df].dropna().reset_index(drop=True)來做到這一點,但shift()沒有按照我的意思行事。pandas.shift如何真正起作用?

請看下面的例子

In [11]: df 
Out[11]: 
    x y 
0 a 1 
1 b 2 
2 b 2 
3 e 4 
4 e 5 
5 f 6 
6 g 7 
7 h 8 

df.x [3]等於df.x [4]但數字是不同的。雖然輸出如下:

In [13]: df[df.shift() != df] 
Out[13]: 
    x y 
0 a 1 
1 b 2 
2 NaN NaN 
3 e 4 
4 NaN 5 
5 f 6 
6 g 7 
7 h 8 

我想刪除行,如果他們真的重複,而不是如果他們包含一些重複值。任何想法?

回答

3

好吧,看在df.shift() != df

>>> df.shift() != df 
     x  y 
0 True True 
1 True True 
2 False False 
3 True True 
4 False True 
5 True True 
6 True True 
7 True True 

這是一個2D對象,而不是一維的,所以當你使用它作爲一個框架上的過濾器,你繼續,你必須真實,並得到NaN的用的那些那些你有假的地方。這聽起來像你想保留的那些地方要麼是真 - 在任何是真正的 - 這是一維對象:

>>> (df.shift() != df).any(axis=1) 
0  True 
1  True 
2 False 
3  True 
4  True 
5  True 
6  True 
7  True 
dtype: bool 
>>> df[(df.shift() != df).any(axis=1)] 
    x y 
0 a 1 
1 b 2 
3 e 4 
4 e 5 
5 f 6 
6 g 7 
7 h 8 
+0

謝謝!它的工作原理,我理解如何。 – Angelo

相關問題