Разделение панд данных на заданную сумму столбца - PullRequest
0 голосов
/ 27 августа 2018

С учетом следующего кадра данных:

    price   volume
0   1       3
1   2       2
2   3       2
3   2       2
4   1       2
pd.DataFrame([[1,3],[2,2],[3,2],[2,2],[1,2]], columns=['price', 'volume'])

Я хочу создать следующий фрейм данных:

    open    high    low close
1   1       2       1   2
4   3       3       1   1
pd.DataFrame([[1,2,1,2],[3,3,1,1]], columns=['open', 'high', 'low', 'close'], index=[1,4])

Преобразование, которое должно быть сделано, выглядит следующим образом:

  1. Для каждой строки сверху вниз sum volume.
  2. Когда сумма равна 5 или больше выборок, строки вносят вклад в эту сумму и применяют функцию, которая выбирает значения open / high / low / close из prices.
  3. Индекс результирующей строки должен иметь тот же индекс, что и последняя строка из исходного кадра данных, вносящего вклад в сумму.

Если бы была функция reduce, которая могла бы перебирать тиски строк, я бы знал, как это сделать. Однако единственные варианты, которые я нашел, это rolling, который имеет дело только со временем, и apply, который не удерживает состояние, как reduce.

В приведенном выше примере, следуя объясненной логике, я получаю 2 раздела, которые затем используются для выбора цены:

partition 1
0   1       3
1   2       2
partition 2
2   3       2
3   2       2
4   1       2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...