Стратифицированная выборка для равных пропорций популяции подгруппы в каждой группе - PullRequest
0 голосов
/ 24 октября 2019

У меня есть фрейм данных со столбцом группы и столбцом подгруппы. Для каждой группы я хочу, чтобы они имели равные пропорции подгрупп. Любые идеи о том, как сделать это в пандах?

импорт панд как pd импорт numpy как np

df2 = pd.DataFrame({'group':(['group1','group2']*50),
    'sub_group':['A', 'C', 'D', 'B','B','B','D','D','D','A']*10,
             'days':np.random.normal(15,3,100),
             'cost':np.random.normal(500,75,100)})


g1 = df2[df2['group']=='group1']['sub_group'].value_counts()
g1/g1.sum()
output:
D 0.6
B 0.2
A 0.2
g2 = df2[df2['group']=='group2']['sub_group'].value_counts()
g2/g2.sum()
output:
B 0.4
D 0.2
C 0.2
A 0.2

Итак, глядя на g1 и g2, ониимеют разные популяции из 4 подгрупп (заметка C даже не присутствует в g1). Я надеюсь на масштабируемую функцию, которая может заставить эти две группы (g1, g2) иметь равные пропорции популяции тех подгрупп (A, B, C, D), где в этом случае C = 0.0.

Таквывод, который я хотел бы получить для этого примера, представляет собой фрейм данных, в котором доля подгрупп для обеих групп одинакова, может быть что-то вроде следующего:

g1 = df2[df2['group']=='group1']['sub_group'].value_counts()
g1/g1.sum()
output:
D 0.4
B 0.3
A 0.3
g2 = df2[df2['group']=='group1']['sub_group'].value_counts()
g2/g2.sum()
output:
B 0.4
D 0.3
A 0.3

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

...