У меня есть два фрейма данных. DF1 содержит следующее:
Пользователь | Интервал времени
Пользователь01 | [01.01.2014 08:12:00, 01.01.2014 08:13:43]
Пользователь02 | [03.01.2014 07:21:44, 04.01.2014 01:07:01]
DF 2 содержит события:
Пользователь | Время | Ценность
Пользователь01 | 03.01.2014 04:11:00 | 9
Пользователь01 | 01.01.2014 08:10:00 | 12
Пользователь02 | 03.01.2014 09:11:00 | 3
Пользователь02 | 02.01.2014 011:10:00 | 21
Я хочу добавить 3 столбца в DF1, содержащие среднее значение, стандартное отклонение и максимальное значение для каждого пользователя в течение интервала времени на основе событий в DF2.
Таким образом, окончательный результат должен выглядеть так:
Пользователь | Временной интервал | Среднее | Макс | СтДев
Пользователь01 | [01.01.2014 08:12:00, 01.01.2014 08:13:43] | NaN | NaN | Нэн
Пользователь02 | [03.01.2014 07:21:44, 04.01.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'])})
Time interval
на два, нижний и верхний, а затем используя что-то вродеbetween_time
во втором кадре данных. - person TomAugspurger   schedule 23.09.2014DF1 = pandas.DataFrame({'User': ...})
и т. д., вместо того, чтобы просто описывать то, что у вас есть, словами. - person chthonicdaemon   schedule 23.09.2014