#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