Python 数据帧删除连续的重复项

Python 数据帧删除连续的重复项,python,pandas,duplicates,dataframe,contiguous,Python,Pandas,Duplicates,Dataframe,Contiguous,如何删除数据帧中的连续/连续/相邻重复项 我以CSV格式处理数据,按日期排序,然后按识别号排序。识别号可以在不同的日子出现,但我只想删除每日的重复。drop_duplicates会留下一个唯一的实例,但会在所有其他日期删除该标识符。我已尝试,但出现错误: localhost:~/Desktop/Public$ python3 test.py Traceback (most recent call last): File "test.py", line 31, in <module&g

如何删除数据帧中的连续/连续/相邻重复项

我以CSV格式处理数据,按日期排序,然后按识别号排序。识别号可以在不同的日子出现,但我只想删除每日的重复。drop_duplicates会留下一个唯一的实例,但会在所有其他日期删除该标识符。我已尝试,但出现错误:

localhost:~/Desktop/Public$ python3 test.py 
Traceback (most recent call last):
  File "test.py", line 31, in <module>
    df2.loc[df2.shift(1) != df2]
  File "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line 1028, in __getitem__
    return self._getitem_axis(key, axis=0)
  File "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line 1148, in _getitem_axis
    raise ValueError('Cannot index with multidimensional key')
ValueError: Cannot index with multidimensional key

只有当
df2
系列
而不是
数据帧
时,才可以使用
.loc
进行索引。实际上,您正试图使用Boleen的数据帧进行索引,
。loc
不知道该做什么(它试图将其用作多索引):

相反,您希望执行以下操作:

>>> df.loc[df.DATE.shift() != df.DATE]

        DATE     REC         NAME
0 2009-07-02  682566  Schmoe, Joe
2 2009-07-11  325640   Black, Joe
5 2009-07-16  200560   White, Joe
>>>  df.loc[(df.DATE != df.DATE.shift(1)) | (df.REC != df.REC.shift(1))]

        DATE     REC         NAME
0 2009-07-02  682566  Schmoe, Joe
1 2009-07-02  244828     Doe, Joe
2 2009-07-11  325640   Black, Joe
3 2009-07-11  544440    Dirt, Joe
5 2009-07-16  200560   White, Joe
6 2009-07-16  685370  Purple, Joe
8 2009-07-16  635400     Red, Joe
9 2009-07-16  348562    Blue, Joe
.loc
在这里工作,因为我们只是为索引创建了一个boleen系列:

>>> df.DATE.shift() != df.DATE

0     True
1    False
2     True
3    False
4    False
5     True
6    False
7    False
8    False
9    False
当然,这不是你想要的数据。要等效于
df.drop_duplicates(['REC','DATE'])
,您需要以下内容:

>>> df.loc[df.DATE.shift() != df.DATE]

        DATE     REC         NAME
0 2009-07-02  682566  Schmoe, Joe
2 2009-07-11  325640   Black, Joe
5 2009-07-16  200560   White, Joe
>>>  df.loc[(df.DATE != df.DATE.shift(1)) | (df.REC != df.REC.shift(1))]

        DATE     REC         NAME
0 2009-07-02  682566  Schmoe, Joe
1 2009-07-02  244828     Doe, Joe
2 2009-07-11  325640   Black, Joe
3 2009-07-11  544440    Dirt, Joe
5 2009-07-16  200560   White, Joe
6 2009-07-16  685370  Purple, Joe
8 2009-07-16  635400     Red, Joe
9 2009-07-16  348562    Blue, Joe
删除重复项的比较

>>> df.drop_duplicates(['REC','DATE'])

        DATE     REC         NAME
0 2009-07-02  682566  Schmoe, Joe
1 2009-07-02  244828     Doe, Joe
2 2009-07-11  325640   Black, Joe
3 2009-07-11  544440    Dirt, Joe
5 2009-07-16  200560   White, Joe
6 2009-07-16  685370  Purple, Joe
8 2009-07-16  635400     Red, Joe
9 2009-07-16  348562    Blue, Joe

我认为
df2.drop\u duplicates(['id\u no','date'])
对你(或者你的识别号叫什么)很有用。展示一个数据集的例子会很有帮助,而且,你在使用
多索引吗?嗯,我觉得自己像个白痴。。。删除重复项(['REC','DATE'])有效。。。然而,最初的问题仍然困扰着我,我相信同样的问题还会再次出现。数据样本来了。谢谢!没有想到在args中放两列。