Существует два двумерных ndarray
s A и B.
A
содержит значения панели для объекта, строки представляют дни, столбцы - разные регионы.В A. есть ~ 3000 столбцов и ~ 5000 строк. Например,
A = array([[ 3.53, 3.56, nan, ..., nan, nan, nan], # day 1 data
[-4.91, -2.54, nan, ..., nan, nan, nan], # day 2 data
[-6.31, -3.39, nan, ..., nan, nan, nan], # day 3 data, etc
...,
[ 0. , -3.41, nan, ..., 12.69, 2.32, nan],
[-2.74, -4.14, nan, ..., -8.63, -1.45, nan],
[-1.74, -7.45, nan, ..., 0.68, -6.52, nan]])
B
содержит тип каждого значения, соответствующего A. В общей сложности существует около 30 типов.Например,
B = array([[ 'A', 'B', nan, ..., nan, nan, nan], # day 1 type
[ 'A', 'A', nan, ..., nan, nan, nan], # day 2 type, etc
...,
[ 'D', 'E', nan, ..., 'I', 'D', nan],
[ 'X', 'Y', nan, ..., 'O', 'S', nan]])
Цель - для каждого дня (строки) регионы должны быть разбиты на 10 групп на основе значений (группа 10> группа 9 ...).И для каждой группы вес каждого типа должен быть равен total number of the type in the row / 10
.Например,
day 1:
# of A: 35 --> weight of A in each group: 3.5
# of B: 33 --> weight of B in each group: 3.3
...
# of Z: 6 --> weight of Z in each group: 0.6
И результатом должно быть что-то вроде
weight_group_1 = array([[ 1, 1, nan, ..., 0.5, ..., 1, ..., nan, nan, nan]
# And the sum of each group's weights should be equal, if all steps correct.
weight_group_2 = array([[ 0, 0, nan, ..., 1, ..., 0.3, ..., nan, nan, nan]
and so on
Есть ли эффективные алгоритмы для достижения этой цели?Пожалуйста, помогите, заранее спасибо!