Python 来自具有给定特征的数据帧的随机样本
Python random sample from dataframe with given characteristics
我有一个包含患者 subject_id
的数据框 df
,包括他们的 gender
和他们的 age
。
我想从此数据框中抽取大小为 n
的随机样本,具有以下特征:
- 50% 男性,50% 女性
- 中位年龄 40 岁
知道如何使用 python 实现吗?
谢谢!
我认为您想要的比 DataFrame.sample
开箱即用的要复杂一点。可以像这样(分别)生成满足您的每个条件的随机样本:
- 仅针对女性进行过滤,并随机抽样
n/2
,然后对男性进行同样的操作,然后将它们合并
- 过滤 40 岁以下,随机抽样
n/2
,然后对 40 岁以上进行同样的操作,然后将它们合并。 (但请注意,这并不能保证中位数恰好为 40。)
如果你想结合这两个约束,你可能需要采样 4 次——40 岁以下的女性,40 岁以下的男性,等等。但这是一般的想法。
采样代码如下:
df.loc[df.age < 40, 'subject_id'].sample(n/2)
df.loc[df.gender == 'F', 'subject_id'].sample(n/2)
我有一个包含患者 subject_id
的数据框 df
,包括他们的 gender
和他们的 age
。
我想从此数据框中抽取大小为 n
的随机样本,具有以下特征:
- 50% 男性,50% 女性
- 中位年龄 40 岁
知道如何使用 python 实现吗? 谢谢!
我认为您想要的比 DataFrame.sample
开箱即用的要复杂一点。可以像这样(分别)生成满足您的每个条件的随机样本:
- 仅针对女性进行过滤,并随机抽样
n/2
,然后对男性进行同样的操作,然后将它们合并 - 过滤 40 岁以下,随机抽样
n/2
,然后对 40 岁以上进行同样的操作,然后将它们合并。 (但请注意,这并不能保证中位数恰好为 40。)
如果你想结合这两个约束,你可能需要采样 4 次——40 岁以下的女性,40 岁以下的男性,等等。但这是一般的想法。
采样代码如下:
df.loc[df.age < 40, 'subject_id'].sample(n/2)
df.loc[df.gender == 'F', 'subject_id'].sample(n/2)