我需要按百分比将df数据帧随机分为对照组,治疗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%
:
:
我已尝试按照堆栈溢出(Assign control vs. treatment groupings randomly based on % for more than 2 groups)上的帖子进行操作,但没有给出我每天所需的实际百分比。下面是我在数据框上使用的代码
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%
:
:
有没有办法做到这一点?