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更好;)