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

Hel*_*rld 1 python python-datetime pandas

我想找到以天为单位的日期列表之间的差异。

我有一个 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')]
Run Code Online (Sandbox Code Playgroud)

我想要以下结果

[0,1,10,2,1,8,0,2,2,0]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但出现编译错误“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))
Run Code Online (Sandbox Code Playgroud)

如果有人能用我的 lambda 表达式帮助我做我想做的事,那就太好了。

WeN*_*Ben 6

因为那是list我们可以使用列表操作

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


jez*_*ael 5

使用Series构造函数 , Series.diffSeries.dt.days删除第一个值 by Series.iloc,转换为整数,然后转换为列表:

print (pd.Series(dateList).diff().dt.days.iloc[1:].astype(int).tolist())
[0, 1, 10, 2, 1, 8, 0, 2, 2, 0]
Run Code Online (Sandbox Code Playgroud)

您的解决方案应该用 更改DatetimeIndex,因此可以在没有列表理解的情况下划分所有值:

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