Разница между датой и временем в секундах в наборе данных 100K + строк - PullRequest
0 голосов
/ 13 октября 2019

Я действительно новичок в Python и Datascience.

У меня есть набор данных с 100K + строками и похожими на 30 столбцами (два datetime, 27 целых чисел и 1 строка). Я хочу создать 31-й столбец, рассчитав разницу между двумя столбцами datetime и получить результат в считанные секунды. Кроме того, я хочу сделать «-5000» как минимальное отклонение между двумя датами.

Итак, чтобы упростить задачу, давайте сосредоточимся только на двух столбцах Datetime.

Цель состоит в том, чтобыперейти от этого:

        first_datetime        second_datetime
0  2019-03-13 04:35:30  2019-03-13 05:35:30
1  2019-03-13 05:35:30  2019-03-13 06:35:30
2  2019-03-13 05:35:30  2019-03-14 06:35:30

К этому:

   diff       first_datetime        second_datetime
0 -3600    2019-03-13 04:35:30  2019-03-13 05:35:30
1   -10    2019-03-13 05:35:30  2019-03-13 05:35:40
2 -5000    2019-03-13 05:35:30  2019-03-14 05:35:40

Мне сказали, что функция .apply самая быстрая, поэтому я использовал ее, чтобы сделать эту функцию:

def calc_diff(row):
    diff=int((row['first_datetime']-row['second_datetime']).total_seconds())
    if diff<-5000:
         return -5000
    else:
         return diff

И я использую его с функцией .apply:

df = pd.DataFrame([{'first_datetime': "2019-03-13 04:35:30", 'second_datetime': "2019-03-13 05:35:30"},{'first_datetime': "2019-03-13 05:35:30", 'second_datetime': "2019-03-13 05:35:40"}])

df['diff']=df.apply(calc_diff, axis=1) 

Проблема в том, что я получаю ошибку памяти, я делаю что-то не так? Какой лучший способ достичь этого?

1 Ответ

2 голосов
/ 13 октября 2019

Вы можете попробовать:

df["diff"]= (df["first_datetime"]-df["second_datetime"]).dt.seconds.clip(lower=-5000)

Редактировать: О разнице между dt.seconds и dt.total_seconds ():

(pd.Timestamp("2019-10-13 00:00:50")-pd.Timestamp("2019-10-10 00:00:00")).seconds                                    
Out: 50

(pd.Timestamp("2019-10-13 00:00:50")-pd.Timestamp("2019-10-10 00:00:00")).total_seconds()                            
Out: 259250.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...