在Python中查找日期列表的差异

3

我想找出日期列表之间的天数差异。

我有一个时间戳对象列表。

[Timestamp('2016-10-18 00:00:00'), Timestamp('2016-10-18 00:00:00'), Timestamp('2016-10-19 00:00:00'), Timestamp('2016-10-29 00:00:00'), Timestamp('2016-10-31 00:00:00'), Timestamp('2016-11-01 00:00:00'), Timestamp('2016-11-09 00:00:00'), Timestamp('2016-11-09 00:00:00'), Timestamp('2016-11-11 00:00:00'), Timestamp('2016-11-13 00:00:00'), Timestamp('2016-11-13 00:00:00')]

And I want the following result

[0,1,10,2,1,8,0,2,2,0]

我尝试了下面的代码,但是遇到编译错误:“TypeError: 'Timestamp' object is not iterable”。
def calculateInterOrderTime(dateList):
   result = map(lambda x: [i / np.timedelta64(1, 'D') for i in np.diff([c for c in x])[0]],dateList)
   print(list(result))

如果有人能够帮助我编写Lambda表达式,让它实现我的期望,那就太好了。

3个回答

8
使用Series构造函数,Series.diffSeries.dt.days,通过Series.iloc去除第一个值,转换为整数,然后转换为列表:
print (pd.Series(dateList).diff().dt.days.iloc[1:].astype(int).tolist())
[0, 1, 10, 2, 1, 8, 0, 2, 2, 0]

您的解决方案应该改用DatetimeIndex,这样就可以不使用列表推导式来分割所有值:

print ((np.diff(pd.DatetimeIndex(dateList)) / np.timedelta64(1, 'D')).astype(int).tolist())
[0, 1, 10, 2, 1, 8, 0, 2, 2, 0]

6

由于这是一个列表,我们可以使用列表操作。

[(t - s).days for s, t in zip(l, l[1:])]
Out[137]: [0, 1, 10, 2, 1, 8, 0, 2, 2, 0]

优秀,不错。 - Thomas Browne

3

由于pandas是在列表l中标记的,因此您可以使用:series.diff()

pd.Series(l).diff().dt.days.dropna().tolist()

[0.0, 1.0, 10.0, 2.0, 1.0, 8.0, 0.0, 2.0, 2.0, 0.0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接