Вычитание рядов панд дает неверный результат - PullRequest
0 голосов
/ 25 января 2019

Мой фрейм данных pandas состоит из столбца "timeStamp", элементы которого имеют тип datetime.datetime.Я пытаюсь получить разницу между двумя последовательными строками этого столбца, чтобы получить время, потраченное в секундах.Для этого я использую следующий фрагмент кода:

df["Time"] = df["timeStamp"].diff(0).dt.total_seconds()

Обычно он работает нормально, однако я получаю 0.0 в результате этой операции довольно часто, даже если это не так.

Примеры значений, которые приводят к 0.0:

import pandas as pd
import datetime
import numpy as np

df = pd.DataFrame({'S.No.': [1, 2, 3, 4], 'ABC': [datetime.datetime(2019,2,25,11,49,50), datetime.datetime(2019,2,25,11,50,0),datetime.datetime(2019,2,25,11,50,7),datetime.datetime(2019,2,25,11,50,12)]})

df["Time"] = df["ABC"].diff(0).dt.seconds

print df

Примечание: использование python2.7

Ответы [ 2 ]

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

Попробуйте это:

print(df["timestamp"].diff().fillna(0).dt.seconds)

0     0
1    10
2     7
3     5

df['difference']=df["timestamp"].diff().fillna(0).dt.seconds
print(df)

            timestamp  difference
0 2019-02-25 11:49:50           0
1 2019-02-25 11:50:00          10
2 2019-02-25 11:50:07           7
3 2019-02-25 11:50:12           5
0 голосов
/ 25 января 2019

Использование

df["Time"] = df["timeStamp"].diff().dt.total_seconds()

вместо.

Аргумент в diff указывает количество строк выше строки, с которой вы хотите вычислить разницу. Теперь вы заполняете его 0, так что вы вычитаете из него значение, которое всегда будет давать 0. Оставляя его пустым, он использует значение по умолчанию 1, поэтому разница с 1 строкой выше.

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