【问题标题】:Create groups by random assignment in python在python中通过随机分配创建组
【发布时间】:2021-10-28 18:36:44
【问题描述】:

我有一个数据集,其中包含 3 个类别(高、中和低)的模型分数。该表如下所示:

| Score   |
| ------- |
| high    |
| high    |
| high    |
| low     |
| low     |
| low     |
| medium  |
| medium  |
| medium  |

我想将这些分数随机分配到 4 个组中。 controltreatment 1treatment 2treatment 3control 组应该有 20% 的观察结果,其余 80% 必须分成其他 3 个大小相等的组。但是,我希望每组中分数(高、中、低)的分布是相等的。如何使用 python 解决这个问题?

PS:这只是实际表格的一个表示,但它会有比这更多的观察结果。

【问题讨论】:

  • 我希望每个组中的分数分布(高、中、低)是相等的这是不可能的,除非原始Score 类型分布均匀。
  • 是的,分数类型将均匀分布。它是从 qcut() 获得的,所以它会均匀分布。

标签: python pandas distribution uniform-distribution


【解决方案1】:

你可以试试groupby.transform:

cats = [ 'control', 'treatment 1', 'treatment 2', 'treatment 3']
probs = [.2, .8/3, .8/3, .8/3]


(df.groupby('Score')['Score']
   .transform(lambda x: np.random.choice(cats, size=len(x), p=probs, replace=True)
)

【讨论】:

  • 这很棒。但我想将组作为另一列添加到现有表中。
  • 是的,df['groups'] = what_provided
  • Groupby 是为了确保采样发生在组内。如果删除它,则无法保证 cats 分布在 Score 中是相同的(尽管可能是)
  • 它只是给我“组”列的 NaN 值。
  • 哦,用.transform代替.apply。对不起
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2018-08-11
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多