Разделение массива данных numpy / pandas по логическим разделителям - PullRequest
0 голосов
/ 01 мая 2020

Предположим, массив numpy (на самом деле Pandas) имеет вид:

[value, included,
 0.123, False,
 0.127, True,
 0.140, True,
 0.111, False,
 0.159, True,
 0.321, True,
 0.444, True,
 0.323, True,
 0.432, False]

Я бы хотел разделить массив так, чтобы исключить элементы False и последующие прогоны True элементы разбиты на собственные массивы. Таким образом, в приведенном выше случае мы получили бы:

[[0.127, True,
  0.140, True],
 [0.159, True,
  0.321, True,
  0.444, True,
  0.323, True]]

Я, конечно, могу сделать это, поместив отдельные элементы в списки, но, конечно, должен быть способ numpy -i sh сделать это.

1 Ответ

1 голос
/ 01 мая 2020

Вы можете создавать группы по обратной маске ~ с Series.cumsum и фильтровать только True с boolean indexing, затем создать список DataFrame с по DataFrame.groupby:

dfs = [v for k, v in df.groupby((~df['included']).cumsum()[df['included']])]
print (dfs)
[   value  included
1  0.127      True
2  0.140      True,    value  included
4  0.159      True
5  0.321      True
6  0.444      True
7  0.323      True]

Также возможно преобразование Dataframes в массивы по DataFrame.to_numpy:

dfs = [v.to_numpy() for k, v in df.groupby((~df['included']).cumsum()[df['included']])]
print (dfs)
[array([[0.127, True],
       [0.14, True]], dtype=object), array([[0.159, True],
       [0.321, True],
       [0.444, True],
       [0.32299999999999995, True]], dtype=object)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...