繁体   English   中英

在python中查找日期列表之间的差异

[英]Find difference between list of dates in python

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

我有一个Timestamp对象的列表。

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

我想要以下结果

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

我尝试了以下代码,但出现编译错误“ TypeError:'Timestamp'对象不可迭代”

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表达帮助我做我想要的事情,那将是很棒的。

由于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]

使用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进行更改,因此可以将所有值DatetimeIndex而无需列表理解:

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

由于那是list我们可以使用列表操作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM