Есть ли способ создать группы из фрейма данных, учитывая, что группы должны быть сбалансированы по среднему значению их значений? - PullRequest
0 голосов
/ 30 декабря 2018

Я хочу создать N групп из кадра данных, но, учитывая, что значения групп должны быть близки к среднему.

Это заголовок моего кадра данных:

cluster_map

, который имеет 61 ряд.И я хочу, чтобы среднее значение каждой группы в столбце «кластер» было похоже на остальные группы.

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

df_out = np.array_split(cluster_map, 14)

но я получаю это на выходе

df_out = np.array_split(cluster_map, 14)
print df_out[0]['cluster'].mean()
print df_out[1]['cluster'].mean()
print df_out[2]['cluster'].mean()
print df_out[3]['cluster'].mean()
print df_out[4]['cluster'].mean()
print df_out[5]['cluster'].mean()
print df_out[6]['cluster'].mean()
print df_out[7]['cluster'].mean()
print df_out[8]['cluster'].mean()
print df_out[9]['cluster'].mean()
print df_out[10]['cluster'].mean()
print df_out[11]['cluster'].mean()
print df_out[12]['cluster'].mean()
print df_out[13]['cluster'].mean()

[Out]
    1.2
    1.6
    1.4
    1.0
    1.2
    1.5
    3.75
    0.5
    1.25
    2.0
    1.0
    2.25
    1.0
    1.0

, где средства столбца 'cluster' не сбалансированы.Я хочу, чтобы эти значения были как можно ближе друг к другу, и постараюсь, чтобы в каждой группе было одинаковое количество элементов.

Есть ли способ сделать это на кадре данных ?.

Спасибо:)

1 Ответ

0 голосов
/ 30 декабря 2018

Это похоже на многослойное разбиение, но вам нужно 14 разделений.Попробуйте это!

from sklearn.model_selection import StratifiedKFold

kf = StratifiedKFold(n_splits=14)

cluster_map['group_id'] = 0
group_id =0

for _, test_index in kf.split(cluster_map,cluster['cluster']):
    cluster_map.loc[test_index,'group_id'] = group_id
    group_id += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...