Количество дней между двумя последовательными строками в пандах с отметкой времени ERROR: dtype (' - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть датафрейм для панд, как показано ниже:

device_id   date
101        2018-10-30 10:42:32
101        2018-12-20 14:14:14
102        2018-09-26 14:21:33
102        2018-10-24 09:12:35
102        2018-11-12 04:52:21

Мой ожидаемый результат -

device_id      date                  diff
    101        2018-10-30 10:42:32   0
    101        2018-12-20 14:14:14   51
    102        2018-09-26 14:21:33   0
    102        2018-10-24 09:12:35   28
    102        2018-11-12 04:52:21   19

Я использовал следующий код:

df['exdate_1'] = df['date'].dt.date      
df['exdate_1'] = df.groupby('device_id')['exdate_1'].apply(lambda x: x.sort_values())    
df['diff'] = df.groupby('device_id')['exdate_1'].diff() / np.timedelta64(1, 'D')

но я получаю сообщение об ошибке, подобное следующему

TypeError: ufunc true_divide cannot use operands with types dtype('float64') 
and dtype('<m8[D]')

Что не так в моем коде? Могу ли я использовать любой другой подход?

1 Ответ

2 голосов
/ 11 апреля 2019

Используйте Series.dt.floor для времени без времени, затем DataFrame.sort_values по нескольким столбцам и для преобразования в дни используйте ваше решение или альтернативу с Series.dt.days:

df['exdate_1'] = df['date'].dt.floor('d') 
df = df.sort_values(['device_id','exdate_1'])
df['diff'] = df.groupby('device_id')['exdate_1'].diff().dt.days.fillna(0).astype(int)
print (df)
   device_id                date   exdate_1  diff
0        101 2018-10-30 10:42:32 2018-10-30     0
1        101 2018-12-20 14:14:14 2018-12-20    51
2        102 2018-09-26 14:21:33 2018-09-26     0
3        102 2018-10-24 09:12:35 2018-10-24    28
4        102 2018-11-12 04:52:21 2018-11-12    19

Причина, по которой ошибка get возникает после df.date объекта python date и плохой работы с ним панд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...