如何识别连续日期

时间:2016-08-03 21:18:51

标签: python datetime pandas

我想确定数据框中连续的日期,即存在直接前任或后继者。然后,我想在新列中标记哪些日期是连续的,哪些日期不连续。另外,我想在我的数据的特定子集中执行此操作。

首先我创建一个新变量,我连续几天识别出假的真假。

weatherFile['CONSECUTIVE_DAY'] = 'NA'   

我已将日期转换为datetime对象,然后转换为有序对象:

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'])

我正在考虑遍历这些组并应用一个操作来识别哪些天是连续的,哪些不是唯一的县内的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:unhashable类型。回溯发生在第二行。 weatherFile [' DATE_INT']是dtype:int64。

2 个答案:

答案 0 :(得分:3)

您可以使用.shift(-1)或.shift(1)来比较连续的条目:

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

如果条目在连续日期之前或之后,则将CONSECUTIVE_DAY设置为TRUE。

答案 1 :(得分:1)

一旦你获得了序数,这是一项微不足道的任务,我在这里使用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被删除。