У меня dataframe который выглядит следующим образом:панды DataFrame интерполирующая/передискретизации ежедневные данные на погруппно
userid date count
a 2016-12-01 4
a 2016-12-03 5
a 2016-12-05 1
b 2016-11-17 14
b 2016-11-18 15
b 2016-11-23 4
Первый столбец представляет собой идентификатор пользователя, второй столбец даты (в результате из группы (pd.TimeGrouper ('d')), а третий столбец - ежедневный счет. Однако для пользователя я хотел бы убедиться, что любые дни, отсутствующие между минимальной и максимальной датой пользователя, заполняются, чтобы быть 0 . на каждого пользователя Так что, если я начинаю с кадра данных, как выше, я в конечном итоге с кадра данных, как это:
userid date count
a 2016-12-01 4
a 2016-12-02 0
a 2016-12-03 5
a 2016-12-04 0
a 2016-12-05 1
b 2016-11-17 14
b 2016-11-18 15
b 2016-11-19 0
b 2016-11-20 0
b 2016-11-21 0
b 2016-11-22 0
b 2016-11-23 4
Я знаю, что существуют различные методы, доступные с рамкой данных pandas для повторной выборки (с возможностью выбора для интерполяции вперед, назад или путем усреднения), но как бы я сделал это в указанном выше смысле, где я хочу непрерывный временной ряд для каждый userid, но где даты временного ряда разные для каждого пользователя?
Вот что я пытался, что не работал:
grouped_users = user_daily_counts.groupby('user').set_index('timestamp').resample('d', fill_method = None)
Однако это выдает ошибку AttributeError: Cannot access callable attribute 'set_index' of 'DataFrameGroupBy' objects, try using the 'apply' method
. Я не уверен, как я смогу использовать метод apply
, показывая все столбцы, как хотелось бы.
Спасибо за любые предложения!
Спасибо! Я не думал о переупорядочивании set_index, и действительно, это всегда меня смущает в том смысле, что существуют повторяющиеся даты, но каким-то образом их устанавливают, поскольку индекс все еще работает? – helloB
Да, но он должен быть уникальным для каждой группы. Спасибо, что согласились. – jezrael