import pandas as pd
import numpy as np
import random
df_credit = pd.read_csv("./train.csv")
print(df_credit["Credit Default"].value_counts())

n_sample=1000
print(pd.__version__)
aa=df_credit.groupby('Credit Default').sample(n=n_sample,replace=True) ## 这个是分成抽样
print("分层抽样")
print(aa["Credit Default"].value_counts())

在这里插入图片描述

案例2

https://www.geeksforgeeks.org/stratified-sampling-in-pandas/

import pandas as pd
  
# Create a dictionary of students
students = {
    'Name': ['Lisa', 'Kate', 'Ben', 'Kim', 'Josh',
             'Alex', 'Evan', 'Greg', 'Sam', 'Ella'],
    'ID': ['001', '002', '003', '004', '005', '006', 
           '007', '008', '009', '010'],
    'Grade': ['A', 'A', 'C', 'B', 'B', 'B', 'C', 
              'A', 'A', 'A'],
    
    'Category': [2, 3, 1, 3, 2, 3, 3, 1, 2, 1]
}
  
# Create dataframe from students dictionary
df = pd.DataFrame(students)
  
# view the dataframe
df

结果如下
在这里插入图片描述

等样本抽样

df.groupby('Grade', group_keys=False).apply(lambda x: x.sample(2))

结果如下
在这里插入图片描述

等比例抽样


df.groupby('Grade', group_keys=False).apply(lambda x: x.sample(frac=0.6))
# 按照比例来比

在这里插入图片描述

分层抽样实现2

这里我也可以使用train_test_spilt进行实现

# get data and format
adata = sc.datasets.paul15()
# can try preprocessing here...
# sc.pp.recipe_zheng17(adata)
# create dictionary of label map
label_map = dict(enumerate(adata.obs["paul15_clusters"].cat.categories))
label_map
# extract of some of the most representative clusters for training/testing
clusters = [0, 1, 2, 3, 4, 5, 13, 14, 15, 16]
indices = adata.obs["paul15_clusters"].cat.codes.isin(clusters)
data, labels = adata.X[indices], adata.obs[indices]["paul15_clusters"].cat.codes.values

在这里插入图片描述

X_train, X_val, y_train, y_val = train_test_split(
    data, labels, stratify=labels, test_size=0.2, random_state=77
)

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐