首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件和样本量的熊猫数据样本

基于条件和样本量的熊猫数据样本
EN

Stack Overflow用户
提问于 2022-05-27 12:24:40
回答 1查看 306关注 0票数 1

代码:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'data': list(range(100))})

我想取一个20码的样本,这样80%的元素在0到10之间,20%在50到70之间。(随机抽样)。

我想要一种适用于任意数量条件的方法。

我的想法是可行的,但不是干净的:对所有介于0到10之间的东西进行采样,取80% * 20行随机行,对其余的值执行同样的操作,并进行连接。是否有一种熊猫-我可以使用,因为这不能很好地适应更多的条件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 13:15:03

你可以用垃圾桶和一本比例大小的字典来取样。

代码语言:javascript
复制
      # ┌─0─┐┌─1─┐┌─2─┐┌─3───┐
bins = [-1, 10, 50, 70, float('inf')]
fraction = {0: 0.8, 2: 0.2} # group 0 is -1-10, group 2 is 50-70
size = 20

groups = pd.cut(df['data'], bins=bins, labels=range(len(bins)-1))

sampled = (df
  .groupby(groups)['data']
  .apply(lambda g: g.sample(n=int(fraction.get(g.name, 0)*size),
                            replace=True)
        )
  #.droplevel(0)
 )

注意:我在这里的示例中使用了replace=True,否则不可能从组0-10中获得16个唯一元素,但是您可以在真实的条件数据中更改这一点,这是安全的。另外,添加.droplevel(0)以移除组id。

产出:

代码语言:javascript
复制
data    
0     6      6
      8      8
      2      2
      3      3
      0      0
      0      0
      6      6
      0      0
      6      6
      3      3
      10    10
      3      3
      8      8
      8      8
      8      8
      2      2
2     54    54
      53    53
      62    62
      64    64
Name: data, dtype: int64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72405418

复制
相关文章

相似问题

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