我可以在不选择同一组两次(不替换)的情况下对数据框中的数据集进行采样吗?

Can i sample sets of data within a dataframe without selecting the same set twice (without replacement)?

我是 python 的新手,我想按他们的组对以下数据框中的数据集进行采样,而无需 select 对同一组进行两次采样。我编写的代码确实对数据集进行了正确采样,但是,它可以 select 同一组两次。

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

数据:

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),这意味着代码可以 select 同一组不止一次。

方法 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