我想删除数据框中的重复相邻行。我试图使用df[df.shift() != df].dropna().reset_index(drop=True)
执行此操作,但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
我想删除该行,如果它们真的是重复的,而不是它们包含一些重复的值。有什么想法吗?
答案 0 :(得分: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对象,而不是一维,所以当你将它用作一个框架上的过滤器时,你可以保留你所拥有的那些,并获得你拥有False的那些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