Вычислить общую длительность активности пользователя
Дан датасет, где представлены имена пользователей и время, в которое они начали отвечать на вопрос. Нужно узнать, сколько всего минут каждый участник затратил на обдумывание. Логика такая: как только один человек ответил на вопрос, начинается отсчет времени для другого участника. Так Max, затратил 6 секунд на обдумывание, после этого начался отсчет для Alex.
Я пробовала сделать это через df.groupby('name').sum(), но в этом случае расчеты неверны. Считается не общее время, затраченное пользователем на обдумывание, а суммируются значения начала отсчета времени.
Например, для Мax правильное значение должно выглядеть так: 00:01:31
Ответы (1 шт):
df = pd.DataFrame({'time': ['0 days 00:00:01', '0 days 00:00:07', '0 days 00:02:03', '0 days 00:05:23',
'0 days 00:06:34', '0 days 00:08:09', '0 days 00:10:53', '0 days 00:11:36',
'0 days 00:14:04', '0 days 00:15:48', '0 days 00:17:12', '0 days 00:19:29',
'0 days 00:21:45'],
'name': ['Max', 'Alex', 'Maria', 'Sam', 'Max', 'Maria', 'Sam', 'Alex', 'John', 'Maria', 'John',
'Sam', 'Alex']})
df.time = df.time.apply(pd.Timedelta)
# конец подготовки данных
df = df.assign(time=lambda x: x.time.diff().shift(-1, fill_value=pd.Timedelta('0'))).groupby('name', as_index=False).sum()
print(df)
name time
0 Alex 0 days 00:04:24
1 John 0 days 00:04:01
2 Maria 0 days 00:07:28
3 Max 0 days 00:01:41
4 Sam 0 days 00:04:10
Для Мax правильное значение получается не 00:01:31, а 00:01:41, поскольку первое вхождение 00:06 (00:07-00:01), второе 01:35 (08:09-06:34).
И остается непонятным, сколько времени потратил Alex в последней строке.

