Python 检查日期是否连续

Python 检查日期是否连续,python,pandas,Python,Pandas,我有一个熊猫数据框架,以检查日期为索引,并有一个物种的类别和类型 Date Category Type 2016-11-21 Cat Animal 2016-11-21 Cat Animal 2017-01-03 Cat Animal 2016-11-01 Dog Animal 2017-01-03 Dog Animal 2016-10-03 Dog Animal 2017-02-01 Dog Animal 2017-03-01 Dog Animal 2016-12-

我有一个熊猫数据框架,以检查日期为索引,并有一个物种的类别和类型

Date    Category    Type
2016-11-21  Cat Animal
2016-11-21  Cat Animal
2017-01-03  Cat Animal
2016-11-01  Dog Animal
2017-01-03  Dog Animal
2016-10-03  Dog Animal
2017-02-01  Dog Animal
2017-03-01  Dog Animal
2016-12-01  Dog Animal
2016-11-21  Horse   Animal
2016-12-15  Horse   Animal
2017-02-04  Horse   Animal
我需要确定每个类别的日期是否连续。连续可能意味着少了一个月,这在马类中可以看到。马的一月份已经不见了,但总体来说,马的检查更新正在增加。所以马是有效的。 然而,猫是无效的,因为它在一天内接受了两次检查

最后的数据帧应该是

Date    Category    Type
2016-11-01  Dog Animal
2017-01-03  Dog Animal
2016-10-03  Dog Animal
2017-02-01  Dog Animal
2017-03-01  Dog Animal
2016-12-01  Dog Animal
2016-11-21  Horse   Animal
2016-12-15  Horse   Animal
2017-02-04  Horse   Animal

以下是如何排除索引不唯一的动物:

df.groupby('Category').filter(lambda x: x.index.is_unique)
这将提供所需的输出:

           Category    Type
Date                       
2016-11-01      Dog  Animal
2017-01-03      Dog  Animal
2016-10-03      Dog  Animal
2017-02-01      Dog  Animal
2017-03-01      Dog  Animal
2016-12-01      Dog  Animal
2016-11-21    Horse  Animal
2016-12-15    Horse  Animal
2017-02-04    Horse  Animal
您的问题表明您希望严格增加日期,然后您可以:

def index_diff(x):
    return ((d_1 - d_0).days for d_1, d_0 in zip(x.index[1:], x.index[:-1]))

df.groupby('Category').filter(lambda x: min(index_diff(x))> 0)
虽然这只是回报

           Category    Type
Date                       
2016-11-21    Horse  Animal
2016-12-15    Horse  Animal
2017-02-04    Horse  Animal
因为在2016-10-03之前,您已经有了
2017-01-03
出现在您的狗狗身上,所以您似乎需要:


如果将
2016-11-21
更改为
2016-12-17
,则
Horse
无效?您是否关心日期的显示顺序?但使用
df.groupby('Category')。过滤器(lambda x:x.index.是唯一的)时,狗也应有效
-另一个答案。如果
连续==每组的索引值不唯一,则可能需要更好地解释(
;)
df = df.groupby('Category').filter(lambda x: x.index.is_unique and 
                                             x.index.is_monotonic_increasing)
print (df)
           Category    Type
Date                       
2016-11-21    Horse  Animal
2016-12-15    Horse  Animal
2017-02-04    Horse  Animal