【问题标题】:Can i sample sets of data within a dataframe without selecting the same set twice (without replacement)?我可以在数据框中采样数据集而不选择两次相同的数据集(无需替换)吗?
【发布时间】:2021-09-27 21:37:40
【问题描述】:

我对 python 比较陌生,我想按他们的组对以下数据框中的数据集进行采样,而不是两次选择同一组。我编写的代码确实对数据集进行了正确采样,但是,它可以选择相同的数据集两次。

请注意:以下数据是测试数据,我使用代码的实际数据要大得多,因此无法使用索引。

数据:

d={'group': ['A','A','A','B','B','B','C','C','C','D','D','D','E','E','E'], 'number': [1,2,3,1,2,3,1,2,3,1,2,3,1,2,3],'weather':['hot','hot','hot','cold','cold','cold','hot','hot','hot','cold','cold','cold','hot','hot','hot']}```
df = pd.DataFrame(data=d)
df
group   number  weather
A       1       hot
A       2       hot
A       3       hot
B       1       cold
B       2       cold
B       3       cold
C       1       hot
C       2       hot
C       3       hot
D       1       cold
D       2       cold
D       3       cold
E       1       hot
E       2       hot
E       3       hot

我的代码

df_s=[]
for typ in df.group.sample(3,replace=False):
    df_s.append(df[df['group']==typ])
df_s=pd.concat(df_s)
df_s

结果

group   number  weather
E       1       hot
E       2       hot
E       3       hot
E       1       hot
E       2       hot
E       3       hot
D       1       cold
D       2       cold
D       3       cold

结果应该给出 3 个不同的组数据,但是可以看出只有 2 个(E & D),这意味着代码可以多次选择同一组。

【问题讨论】:

  • 您可以使用np.random.seed(32) 使数据可重现。您可以将值 32 替换为您想要的任何值。因此,如果您共享代码或重新运行代码,您将生成相同的随机数据样本。

标签: python pandas random sample sample-data


【解决方案1】:

方法sample 与参数replace=False 一起使用将确保您在创建的样本df 中没有行重复。但是,您确实有几行具有相同的字母表示组(您的列group)。

仅用于快速修复您的代码:

df_s=[]
for typ in np.random.choice(df["group"].unique(), 3, replace=False):
    df_s.append(df[df['group']==typ])
df_s=pd.concat(df_s)
df_s

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多