【问题标题】:Create distribution in Pandas在 Pandas 中创建分布
【发布时间】:2020-09-24 17:26:10
【问题描述】:

我想生成具有特定分布的随机/模拟数据集。

例如,分布具有以下属性。

  1. 人口1000人
  2. 性别组合为:男性 49%,女性 50%,其他 1%
  3. 年龄分布如下:0-30(30%)、31-60(40%)、61-100(30%)

生成的数据框将有 1000 行,两列称为性别和年龄(具有上述值分布)

有没有办法在 Pandas 或其他库中执行此操作?

【问题讨论】:

  • numpy.random.choice
  • 您想要这些 % 混合吗?或者你想创建一个具有这些概率的样本?对于年龄,61+ 是什么意思(上限是多少?100?120?)。年龄是否在年龄范围内均匀分布?或者年龄只是一个类别的指标,而不是一个实际的数字?
  • 我编辑了年龄的上限

标签: python pandas dataframe distribution


【解决方案1】:

你可以试试:

N = 1000
gender = np.random.choice(["male","female", "other"], size=N, p = [.49,.5,.01])

age = np.r_[np.random.choice(range(30),size= int(.3*N)),
       np.random.choice(range(31,60),size= int(.4*N)),
       np.random.choice(range(61,100),size= N - int(.3*N) - int(.4*N) )]
np.random.shuffle(age)

df = pd.DataFrame({"gender":gender,"age":age})

【讨论】:

  • 使用randint(31,61,size=...) 可能会更快。
  • 我从 OP 中了解到,年龄将显示为括号,并且可以以与性别相同的方式生成。
  • @PaulH 61+ 表示具有长尾的分布
  • 完全可以,但我要说的是数组应该从三个类别中选择,而不是连续分布。这个问题模棱两可。我只是分享我的解释
  • @PaulH 完全同意你的看法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多