Создайте столбец с указанием времени, прошедшего (в секундах) с момента первой даты, на основе двух условий

#python #pandas #datetime

Вопрос:

У меня есть 3 кола:

Идентификатор пользователя Страна Дата и время

Цель: Мне нужно создать четвертый столбец, который показывает время, прошедшее в секундах, на основе первого времени пользователя и страны

Например

Идентификатор пользователя Страна Дата и время Прошло много времени
123 Германия 2020-01-01 14:30:04 00:00 0
123 Германия 2020-01-01 14:30:10 00:00 6
123 Франция 2020-01-01 16:34:00 00:00 0
444 Испания 2020-01-01 18:05:00 00:00 0

В SQL я бы сделал a First_Value over (partition by User_id, country order by Datetime asc) и сделал a datediff за считанные секунды

Эффективнее ли это делать с помощью pandas или numpy для кадров данных с более чем 200 тыс. строк?

Ответ №1:

Я не могу проверить код прямо сейчас, но я бы сделал что-то вроде:

 # ensure datetime type (optional if already right type)
df['Datetime'] = pd.to_datetime(df['Datetime'])

# get the first value per group:
df['first'] = df.groupby(['User_id', 'Country']).transform.min() # or first() if you want the first row, not earliest time

# calculate the difference
df['TimeElapsed'] = df['Datetime'] - df['first']