У меня есть два dataframes. DF1 содержит:Pandas groupby временные интервалы
Пользователь | Временной интервал
User01 | [01/01/2014 08:12:00, 01/01/2014 08:13:43]
User02 | [01/03/2014 7:21:44, 01/04/2014 1:07:01]
DF 2 содержит события:
пользователя | Время | Значение
User01 | 01/03/2014 04:11:00 | 9
User01 | 01/01/2014 08:10:00 | 12
User02 | 01/03/2014 09:11:00 | 3
User02 | 01/02/2014 011: 10: 00 | 21
Я хочу добавить 3 столбца в DF1, содержащий среднее, стандартное отклонение и максимальные значения для каждого пользователя в течение временного интервала, в зависимости от событий в DF2.
Таким образом, окончательный результат должен выглядеть следующим образом:
пользователя | Временной интервал | Среднее | Макс | StDev
User01 | [01/01/2014 08:12:00, 01/01/2014 08:13:43] | NaN | NaN | Nan
User02 | [01/03/2014 07:21:44, 01/04/2014 01:07:01] | 3 | 3 | 0
Что такое эффективный способ сделать это, если мои столы большие? Есть ли какая-то функция «groupby» для временных интервалов, которые основаны на другом кадре данных?
Код:
import pandas as pd
DF1 = pd.DataFrame({'User' : pd.Series(["User01", "User02"], index=['1', '2']), 'Time start' : pd.Series(["01/01/2014 08:12:00", "01/03/2014 07:21:44"], index=['1', '2']),'Time end' : pd.Series(["01/01/2014 08:13:43", "01/04/2014 01:07:01"], index=['1', '2'])})
DF2 = pd.DataFrame({'User' : pd.Series(["User01","User01","User02", "User02"], index=['1', '2','3','4']), 'Time' : pd.Series(["01/03/2014 04:11:00", "01/01/2014 08:10:00","01/03/2014 09:11:00","01/02/2014 011:10:00"], index=['1', '2','3', '4']),'Value' : pd.Series([9,12,3,21], index=['1', '2','3','4'])})
DF3 = pd.DataFrame({'User' : pd.Series(["User01", "User02"], index=['1', '2']), 'Time start' : pd.Series(["01/01/2014 08:12:00", "01/03/2014 07:21:44"], index=['1', '2']),'Time end' : pd.Series(["01/01/2014 08:13:43", "01/04/2014 01:07:01"], index=['1', '2']),'Mean' : pd.Series(["Nan", 3], index=['1', '2']),'Max' : pd.Series(["Nan", 3], index=['1', '2']),'StDev' : pd.Series(["Nan", 0], index=['1', '2'])})
Это полезно иметь копируемые pasteable примеры. Также опубликуйте, как должно выглядеть ваше ожидаемое решение с примерами, которые вы дали. Это можно сделать, разделив столбец «Интервал времени» на два, низкий и высокий, а затем используя что-то вроде 'between_time' на втором фреймворке данных. – TomAugspurger
Спасибо. Можете ли вы указать, что вы подразумеваете под примером копирования? –
Вы говорите, как выглядят ваши данные, но вы не предоставляете код для их создания. Это означает, что любой, кто пытается помочь вам, сначала должен будет написать код для создания этих фреймов данных. Гораздо проще скопировать и вставить код, чтобы добраться до той же точки, что и сейчас, а не тратить время на повторное создание ваших структур данных. Попробуйте сделать df.to_dict() на ваших объектах, а затем отправьте код типа 'DF1 = pandas.DataFrame ({'User': ...})' etc вместо простого описания того, что у вас есть в словах. – chthonicdaemon