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