У меня есть DataFrame с временным рядом, проиндексированным временной меткой, например:
timestamp A B
2018-11-12 14:03:53 9.45 501.0
2018-11-12 14:03:58 73.8 108.0
2018-11-12 14:04:09 4.25 215.0
2018-11-12 14:04:19 62.39 551.0
2018-11-12 14:04:29 15.98 113.0
Я хотел бы сделать несколько агрегаций на основе бинов этих данных, например:
df.groupby(pd.Grouper(freq='30Min')).apply(custom_agg)
Однако проблема в том, что и этот группер, или serialize
создают непрерывный диапазон бинов, но мои данные ограничены определенными часами в каждом дне (скажем, после 14.00). Это оставляет меня с огромным количеством групп без данных:
2018-11-13 00:00:00 NaN NaN 0.0
2018-11-13 00:30:00 NaN NaN 0.0
2018-11-13 01:00:00 NaN NaN 0.0
2018-11-13 01:30:00 NaN NaN 0.0
2018-11-13 02:00:00 NaN NaN 0.0
2018-11-13 02:30:00 NaN NaN 0.0
2018-11-13 03:00:00 NaN NaN 0.0
Я бы хотел отфильтровать это. Использование df.filter()
не очень поможет, поскольку проблема не в исходных строках, а в группах.
Я пытался использовать apply
: df.groupby(pd.Grouper(freq='30Min')).apply(lambda x: x[x.index.min().hour >= 14])
, но я получаю KeyError: True
. (Дополнительный вопрос, почему это не работает?)
Каков наилучший способ фильтрации DataFrame по заданному набору условий, включающих группировку после применения a groupby
?