Разница в метке времени и результате также должна быть в одном и том же формате

#scala #dataframe #apache-spark #apache-spark-sql

Вопрос:

Мои данные выглядят так:

 |end_time------------|time----------------- |

|1947-08-15 05:30:00| 2020-09-18 16:44:52|       
|1947-08-15 05:30:00| 2020-09-18 16:45:17|      
|1947-08-15 05:30:00| 2020-10-12 14:26:58|       
|1947-08-15 05:30:00| 2020-10-12 16:10:56|     
|1947-08-15 05:30:00| 2020-10-12 16:11:30|
 

Я хочу добавить новый столбец, который будет выглядеть следующим образом:

 --end_time----------| time------------------| Difference

|2021-08-16 23:50:26| 2021-08-17 00:20:48| 0:30:22       
|1947-08-15 05:30:00| 2020-09-18 16:45:17|      
|1947-08-15 05:30:00| 2020-10-12 14:26:58|       
|1947-08-15 05:30:00| 2020-10-12 16:10:56|     
|1947-08-15 05:30:00| 2020-10-12 16:11:30|
 

Как этого добиться?

Ответ №1:

Ваши столбцы времени в заданном/ожидаемом отличаются. Игнорируя это и предполагая, что вы имеете в виду разницу во времени между двумя столбцами даты и времени…

Создать рамку:

 import pandas as pd
from datetime import timedelta

df = pd.DataFrame({'end_time': {0: '1947-08-15 05:30:00',
  1: '1947-08-15 05:30:00',
  2: '1947-08-15 05:30:00',
  3: '1947-08-15 05:30:00',
  4: '1947-08-15 05:30:00'},
 'time': {0: '2020-09-18 16:44:52',
  1: '2020-09-18 16:45:17',
  2: '2020-10-12 14:26:58',
  3: '2020-10-12 16:10:56',
  4: '2020-10-12 16:11:30'}})
                  
df['end_time'] = pd.to_datetime(df['end_time'])
df['time'] = pd.to_datetime(df['time'])
 

Затем:

 def diffTime(x, y):
    a = timedelta(hours=x.hour, minutes=x.minute, seconds=x.minute)
    b = timedelta(hours=y.hour, minutes=y.minute, seconds=y.minute)
    
    return pd.to_datetime(str(a - b),format= '%H:%M:%S' ).time()

df['difference'] = df.apply(lambda x: diffTime(x['time'], x['end_time']), axis=1)

print(df)
 

Выход:

              end_time                   time    difference
0 1947-08-15 05:30:00    2020-09-18 16:44:52      11:14:14
1 1947-08-15 05:30:00    2020-09-18 16:45:17      11:15:15
2 1947-08-15 05:30:00    2020-10-12 14:26:58      08:55:56
3 1947-08-15 05:30:00    2020-10-12 16:10:56      10:39:40
4 1947-08-15 05:30:00    2020-10-12 16:11:30      10:40:41