Найти разницу между списком дат в питоне - PullRequest
1 голос
/ 05 июня 2019

Я хочу найти разницу между списком дат в днях.

У меня есть список объекта 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]

Я попробовал следующий код, но получаю ошибку компиляции "Ошибка типа: объект '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))

Было бы здорово, если бы кто-нибудь помог мне с моим лямбда-выражением сделать то, что я хочу.

Ответы [ 3 ]

3 голосов
/ 05 июня 2019

Использовать Series конструктор, Series.diff, Series.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]
3 голосов
/ 05 июня 2019

Поскольку это list, мы можем использовать операцию списка

[(t - s).days for s, t in zip(l, l[1:])]
Out[137]: [0, 1, 10, 2, 1, 8, 0, 2, 2, 0]
3 голосов
/ 05 июня 2019

Поскольку 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]
...