pandas.shift如何真正起作用?

时间:2015-11-03 15:08:11

标签: python pandas

我想删除数据框中的重复相邻行。我试图使用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

我想删除该行,如果它们真的是重复的,而不是它们包含一些重复的值。有什么想法吗?

1 个答案:

答案 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