Я хочу сгруппировать ненулевые значения вместе, где группа определяется как подсписок последовательных элементов, которые содержат все ненулевые значения, разделенные окружающими 0-значными элементами.Например:
values = [0, 0, 0, 1, 2, 3, 0, 0, 3, 3, 4, 3, 0, 0, 5]
... # do some splitting, grouping, black magic, etc.
values = [[1, 2, 3], [3, 3, 4, 3], [5]]
Эта концепция звучит как использование оконной функции в PostgreSQL.Я пытаюсь найти эффективный / элегантный способ сделать то же самое с DataFrame.
Я работаю с временными данными, поэтому получающиеся группы также должны поддерживать свой первоначальный порядок.Например, предположим, что у меня есть следующий DataFrame:
timestamp value
2018-01-01 0
2018-01-02 0
2018-01-03 1
2018-01-04 2
2018-01-05 3
2018-01-06 0
2018-01-07 0
2018-01-08 3
2018-01-09 0
2018-01-11 5
2018-01-12 5
2018-01-13 3
2018-01-14 0
2018-01-15 5
После разбиения его на разные группы, я ожидаю, что каждая группа будет:
# Group 1
2018-01-03 1
2018-01-04 2
2018-01-05 3
# Group 2
2018-01-08 3
# Group 3
2018-01-11 5
2018-01-12 5
2018-01-13 3
# Group 4
2018-01-15 5
Я видел похожие проблемы, которыеиспользуйте набор методов для DataFrame (groupby()
, cumsum()
, rolling()
и т. д.), но ничего, что соответствует моим точным потребностям.Я нашел этот бит документации , который, кажется, решает проблему такого типа, но вышел с пустыми руками.Кто-нибудь поможет?