如何识别连续日期



我想在数据帧中识别连续的日期,也就是说,存在直接的前任或继任者。然后,我想在一个新的列中标记哪些日期是连续的,哪些日期不是连续的。此外,我想在我的数据的特定子集内进行此操作。

首先,我创建了一个新的变量,在这里我可以识别连续几天的True或False。

weatherFile['CONSECUTIVE_DAY'] = 'NA'   

我已经将日期转换为日期时间对象,然后转换为序号对象:

weatherFile['DATE_OBJ'] = [datetime.strptime(d, '%Y%m%d') for d in weatherFile['DATE']]
weatherFile['DATE_INT'] = list([d.toordinal() for d in weatherFile['DATE_OBJ']])

现在我想确定以下组中的连续日期:

weatherFile.groupby(['COUNTY_GEOID_YEAR', 'TEMPBIN'])

我正在考虑循环浏览这些组,并应用一个操作来识别哪些日子是连续的,哪些日子不是,在唯一的县内,临时子集。

我对编程和python相当陌生,到目前为止这是一个好方法吗?如果是,我该如何进步?

谢谢-如果我需要提供更多信息,请告诉我。

更新:

使用@karakfa的建议,我尝试了以下方法:

weatherFile.groupby(['COUNTY_GEOID_YEAR', 'TEMPBIN'])
weatherFile['DISTANCE'] = weatherFile[1:, 'DATE_INT'] - weatherFile[:-1,'DATE_INT']
weatherFile['CONSECUTIVE?'] = np.logical_or(np.insert((weatherFile['DISTANCE']),0,0) == 1, np.append((weatherFile['DISTANCE']),0) == 1)

这导致了一个TypeError:不可处理的类型。回溯发生在第二行。weatherFile['DATE_INT']是dtype:int64。

您可以使用.shift(-1)或.shift

df.loc[df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1, 'CONSECUTIVE_DAY'] = True

如果前一个条目是前一天的,则将CONSECUTIVE_DAY设置为TRUE

df.loc[(df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1) | (df['DATE_INT'].shift(1) - df['DATE_INT'] == -1), 'CONSECUTIVE_DAY'] = True

如果条目前面或后面有连续日期,则将CONSUCTIVE_DAY设置为TRUE。

一旦你有了序数,这是一项微不足道的任务,这里我使用numpy数组来提出一种替代

a=np.array([1,2,4,6,7,10,12,13,14,20])
d=a[1:]-a[:-1]                                            # compute delta
ind=np.logical_or(np.insert(d,0,0)==1,np.append(d,0)==1)  # at least one side matches
a[ind]                                                    # get matching entries

提供有连续数字的数字

array([ 1,  2,  6,  7, 12, 13, 14])

即4、10和20。

相关内容

  • 没有找到相关文章

最新更新