Фильтрация кадров данных Pandas по группам с нерегулярными временными рядами - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть 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?

1 Ответ

2 голосов
/ 29 апреля 2019

Попробуйте использовать .dt.floor:

df.groupby(df['timestamp'].dt.floor('30Min')).apply(custom_agg)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...