рассчитать разницу во времени между двумя последовательными строками в пандах - PullRequest
0 голосов
/ 03 января 2019

У меня есть датафрейм панд следующим образом

Dev_id     Time
88345      13:40:31
87556      13:20:33
88955      13:05:00
.....      ........
85678      12:15:28

Приведенный выше фрейм данных имеет 83000 строк. Я хочу взять разницу во времени между двумя последовательными строками и сохранить ее в отдельном столбце. Желаемый результат будет

Dev_id    Time          Time_diff(in min)
88345      13:40:31      20
87556      13:20:33      15
88955      13:05:00      15

Я пытался df['Time_diff'] = df['Time'].diff(-1), но получаю ошибку, как показано ниже

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

Как решить эту проблему

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы должны сначала преобразовать / привести столбец df ['Time'] к pd.Timedelta, а затем выполнить вычитание

0 голосов
/ 03 января 2019

Проблема в том, что pandas нужно datetime с или timedelta с для функции diff, поэтому сначала необходимо преобразовать to_timedelta, затем получить total_seconds и разделить на 60:

df['Time_diff'] = pd.to_timedelta(df['Time'].astype(str)).diff(-1).dt.total_seconds().div(60)
#alternative
#df['Time_diff'] = pd.to_datetime(df['Time'].astype(str)).diff(-1).dt.total_seconds().div(60)
print (df)
   Dev_id      Time  Time_diff
0   88345  13:40:31  19.966667
1   87556  13:20:33  15.550000
2   88955  13:05:00  49.533333
3   85678  12:15:28        NaN

Если хотите floor или round в минуту:

df['Time_diff'] = (pd.to_timedelta(df['Time'].astype(str))
                     .diff(-1)
                     .dt.floor('T')
                     .dt.total_seconds()
                     .div(60))
print (df)
   Dev_id      Time  Time_diff
0   88345  13:40:31       19.0
1   87556  13:20:33       15.0
2   88955  13:05:00       49.0
3   85678  12:15:28        NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...