Pandas манипуляции с датой и временем - PullRequest
0 голосов
/ 11 марта 2020

У меня есть pandas датафреймы для хранения единиц времени:

import pandas as pd

d = {
      'analysis_datetime': ['2018-07-15 11:50:48+00:00', '2018-07-15 13:22:24+00:00'], 
      'processing_duration': [4930, 8101], 
      'accessioning_duration': [1032, 2310]
}

df = pd.DataFrame(data=d)

Столбцы processing_duration и accessioning_duration указаны в минутах.

Я хотел бы создать новый столбец с именем shipping_datetime на основе следующей формулы:

shipping_datetime = analysis_datatime - processing_duration - accessioning_duration

Первое время доставки должно быть

from datatime import datatime, timedelta

shipping_datetime = datetime.strptime('2018-07-15 11:50:48+00:00', '%Y-%m-%d %H:%M:%S%z') 
- timedelta(minutes=4930) 
- timedelta(minutes=1032)

shipping_datetime.strftime('%Y-%m-%d %H:%M:%S%z')

'2018-07-15 11:50:48+0000'

Это один ряд. Я хотел бы создать новый столбец, который применяет это ко всем строкам.

Вот что у меня есть:

df['shipping_datetime'] = df.apply(lamba x.strftime('%Y-%m-%d %H:%M:%S%z'): 
pd.to_datetime(x.analysis_datetime) 
- timedelta(minutes=x.processing_duration) 
- timedelta(minutes=x.accessioning_duration), axis=1)

Я получаю неверную синтаксическую ошибку. Как мне это сделать?

1 Ответ

1 голос
/ 11 марта 2020

Я бы посоветовал против python datetime. Вместо этого вы должны использовать Pandas 'datetime для обработки временных рядов Pandas. Например, вы можете сделать:

duration = df[['processing_duration','accessioning_duration']].sum(1)

pd.to_datetime(df['analysis_datetime']) - pd.to_timedelta(duration, unit='min')

Вывод:

0   2018-07-11 08:28:48+00:00
1   2018-07-08 07:51:24+00:00
dtype: datetime64[ns, UTC]
...