Мне нужно найти быстрое решение разбить фрейм данных панд на несколько частей по двум условиям.
Данные испытаний:
import pandas as pd
df=pd.DataFrame({'col1':[1,2,23,4,5,6],'col2':[10,11,12,13,14,89]})
col1 col2
0 1 10
1 2 11
2 23 12
3 4 13
4 5 14
5 6 89
Нужно это разделить на куски, как [обратите внимание, что для многопользовательской игры 0,1 нужно рассчитать, чтобы деление работало]:
divider_number = 2
split_value_1 = df['col1'].sum()/divider_number
split_value_2 = df['col2'].sum()/divider_number
eps_1 = 0.1* split_value_1
eps_2 = 0.1* split_value_2
, где каждый кусок имеет строки, сумма которых равна:
split_value_1 - eps_1 < sum_col1 < split_value_1 + eps_1
и
split_value_2 - eps_2 < sum_col2 < split_value_2 + eps_2
Я имею в виду, что в конце каждого кадра содержатся строки, сумма элементов в столбце 1 и в столбце 2 близка к сумме элементов всех остальных разделенных фреймов данных.
Я пытаюсь перебрать каждую строку, собрать значения и затем проверить условия внутри цикла while, которые перетасовывают фрейм данных, но это решение кажется мне очень грубым.
Ожидаемый результат примерно такой:
df1:
col1 col2
0 1 10
1 2 11
2 23 12
df2:
col1 col2
3 4 13
4 5 14
5 6 89
Обратите внимание, что для div_number> 2 в качестве вывода используется оболочка из нескольких фреймов данных.
Спасибо всем за тяжелую работу:)