Мне нужно случайным образом разделить фрейм данных на контрольную, 1-ю и 2-ю группы лечения, то есть 10%, 45%, 45% соответственно за каждый день.
Это примерный фрейм данных,
Date Customer_ID
1. 2018-05-01 411
2. 2018-05-01 414
3. 2018-05-01 421
4. 2018-05-01 431
5. 2018-05-01 433
6. 2018-05-02 441
7. 2018-05-02 442
8. 2018-05-02 443
9. 2018-05-02 444
Мой конечный результат должен выглядеть следующим образом:
Date Customer_ID Group
1. 2018-05-01 411 Control
2. 2018-05-01 414 Treatment 1
3. 2018-05-01 421 Treatment 1
4. 2018-05-01 431 Treatment 2
5. 2018-05-01 433 Treatment 2
6. 2018-05-02 441 Treatment 1
7. 2018-05-02 442 Treatment 2
8. 2018-05-02 443 Treatment 2
9. 2018-05-02 444 Treatment 1
Для каждого дневного контрольного, 1-го и 2-го контрольных групп должно быть соответственно 10%, 45% и 45%от общего числа клиентов в этот конкретный день.
После перекрестного табулирования окончательных данных о результатах по дате и создания новой групповой переменной я должен получить следующие проценты по каждой категории на общее количество клиентов в день:
Date Group
Control Treatment1 Treatment2
1. 2018-05-01 10 % 45% 45%
2. 2018-05-02 10 % 45% 45%
3. 2018-05-03 10 % 45% 45%
4. 2018-05-04 10 % 45% 45%
:
:
Я пытался следить за этим сообщением о переполнении стека ( Случайно назначать контрольные и лечебные группировки на основе% для более чем 2 групп ), но это не дает мне фактические процентыЯ хочу за каждый день .Ниже приведен код, который я использовал на фрейме данных
df['Groups'] = df.groupby('date')['Customer_ID'].transform(lambda x: np.random.choice(['Control','treatment_1', 'treatment_2'], len(x), p=[0.1,0.45,0.45]))
Я получаю следующие проценты (количество подсчетов в каждой категории / общее количество подсчетов в день):
Date Group
Control Treatment1 Treatment2
1. 2018-05-01 8.42 % 47.37% 44.21%
2. 2018-05-02 11.4 % 36.84% 51.75%
3. 2018-05-03 11.68 % 51.09% 37.23%
4. 2018-05-04 8.26 % 46.79% 44.95%
:
:
Есть лиспособ сделать это?