С учетом следующего кадра данных:
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])
Преобразование, которое должно быть сделано, выглядит следующим образом:
- Для каждой строки сверху вниз
sum
volume
.
- Когда сумма равна 5 или больше выборок, строки вносят вклад в эту сумму и применяют функцию, которая выбирает значения open / high / low / close из
prices
.
- Индекс результирующей строки должен иметь тот же индекс, что и последняя строка из исходного кадра данных, вносящего вклад в сумму.
Если бы была функция reduce
, которая могла бы перебирать тиски строк, я бы знал, как это сделать. Однако единственные варианты, которые я нашел, это rolling
, который имеет дело только со временем, и apply
, который не удерживает состояние, как reduce
.
В приведенном выше примере, следуя объясненной логике, я получаю 2 раздела, которые затем используются для выбора цены:
partition 1
0 1 3
1 2 2
partition 2
2 3 2
3 2 2
4 1 2