#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']