Экспериментальная конструкция - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно случайным образом разделить фрейм данных на контрольную, 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%
      :
      :

Есть лиспособ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...