Pandas 查找数据帧中最长的日期序列

Pandas 查找数据帧中最长的日期序列,pandas,dataframe,Pandas,Dataframe,我想知道如何在publish_date列中找到最长的连续日期序列(格式为2016-11-27)(日期不是索引,但我想它们可能是) 有许多类似的堆栈溢出问题,但AFAICT所有建议的答案都返回最长序列的大小,这不是我想要的 例如,我想知道从2017-01-01到2017-06-01的这段时间没有遗漏日期,并且是这段时间最长的一段 下面是一个如何做到这一点的示例: import pandas as pd import datetime # initialize data data = {'a':

我想知道如何在
publish_date
列中找到最长的连续日期序列(格式为
2016-11-27
)(日期不是索引,但我想它们可能是)

有许多类似的堆栈溢出问题,但AFAICT所有建议的答案都返回最长序列的大小,这不是我想要的


例如,我想知道从
2017-01-01
2017-06-01
的这段时间没有遗漏日期,并且是这段时间最长的一段

下面是一个如何做到这一点的示例:

import pandas as pd
import datetime

# initialize data
data = {'a': [1,2,3,4,5,6,7],
        'date': ['2017-01-01', '2017-01-03', '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-09', '2017-01-31']}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

# create mask that indicates sequential pair of days (except the first date)
df['mask'] = 1
df.loc[df['date'] - datetime.timedelta(days=1) == df['date'].shift(),'mask'] = 0

# convert mask to numbers - each sequence have its own number
df['mask'] = df['mask'].cumsum()

# find largest sequence number and get this sequence
res = df.loc[df['mask'] == df['mask'].value_counts().idxmax(), 'date']

# extract min and max dates if you need
min_date = res.min()
max_date = res.max()

# print result
print('min_date: {}'.format(min_date))
print('max_date: {}'.format(max_date))
print('result:')
print(res)
结果将是:

min_date: 2017-01-05 00:00:00
max_date: 2017-01-07 00:00:00
result:
2   2017-01-05
3   2017-01-06
4   2017-01-07

谢谢你的回答!我愿意投票,但我没有必要的声誉。不客气!您可以将答案标记为正确-这比upvote更好;)