首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从单个熊猫数据栏的值中选择大小为n的随机样本,重复值最多为2次?

如何从单个熊猫数据栏的值中选择大小为n的随机样本,重复值最多为2次?
EN

Stack Overflow用户
提问于 2021-03-19 22:32:05
回答 1查看 113关注 0票数 2

我的数据看起来是这样的:

代码语言:javascript
复制
Identifier       Strain     Other columns, etc.
1                  A
2                  C
3                  D
4                  B
5                  A
6                  C
7                  C
8                  B
9                  D
10                 A
11                 D
12                 D

我想随机选择n行,同时保持应变值的多样性。例如,我想要一组6,所以我希望我的最后一行至少包括每种类型的菌株中的一种,两种菌株出现两次。

我尝试过将应变列转换为numpy数组,并使用方法random.choice,但这似乎没有运行。我也尝试过使用.sample,但它并没有最大限度地提高菌株的多样性。

这是我最近的一次尝试,它按照顺序输出7大小的样本(标识符0-7),所有菌株都是相同的。

代码语言:javascript
复制
randomsample = df[df.Strain == np.random.choice(df['Strain'].unique())].reset_index(drop=True)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-20 01:51:10

我相信numpy有什么东西能做到这一点,但我记不起是哪一种了。下面是一个相当快速的方法:

randomness

  • enumerate的数据
  1. 对每个组中的行进行
  2. 排序,按照
  3. 上的枚举来划分顶级n

所以在代码中:

代码语言:javascript
复制
n = 6

df = df.sample(frac=1)                      # step 1 
enums = df.groupby('Strain').cumcount()     # step 2 
        
orders = np.argsort(enums)                  # step 3
samples = df.iloc[orders[:n]]               # step 4

输出:

代码语言:javascript
复制
   Identifier Strain  Other columns, etc.
2           3      D                  NaN
7           8      B                  NaN
0           1      A                  NaN
5           6      C                  NaN
4           5      A                  NaN
8           9      D                  NaN
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66716352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档