# -*- coding: utf-8 -*- #1. 概念:随机抽样,是指随机从数据中,按照一定的行数或者比例抽取数据 #随机抽样函数:DataFrame.sample(n,frac,replace=False) #n:按个数抽样 #frac:按百分比抽样 #注:以上两个参数只能任意设置一个 #replace:是否可放回抽样,默认为False不可放回(所谓能否放回即被抽取过的数据还能不能被再次抽取) #返回值:抽样后的数据框
import numpy import pandas
df = pandas.read_csv('D:/workspaces/python/pythonStudy/14.csv')
#设置随机种子 numpy.random.seed(seed=2)
#按照个数抽样 df.sample(n=10) #随机抽取10条记录
#按照百分比抽样 df.sample(frac=0.02) #抽取百分之二的数据
df.sample(n=10,replace=True) #可放回的随机抽样
#分组抽样: gbr = df.groupby("class") #按班级分组
gbr.groups #得到所有的分组字典。每一组的成员是各行的索引
#基于上述知识: #1. 按个数进行分组抽样: #使用字典定义抽样方式:1班中抽2个人,2班抽4个人,3班抽6个人 typicalNDict = { 1:2, 2:4, 3:6 } def typicalSampling(group,typicalNDict): #print("test"); name = group.name print (name) n = typicalNDict[name] tempresult = group.sample(n=n) print (tempresult) return tempresult
result = df.groupby('class',group_keys=False).apply(typicalSampling,typicalNDict) #通过typicalSampling方法中打印的测试方法可以看到,该方法一共被调用了三次(因为一共得到了三个分组DataFrame),result的最终结果是三次调用结果的并集 #注:实际上typicalSampling会调用4次,通过在方法的第一行打印一些内容就可以看到,官方解释:apply在第一列/行上调用func两次,以决定是否可以进行某些优化www.cnblogs.com/wkang/p/101… #奇怪的是:如果不在name = group.name之前打印内容,就看不出方法调用了4次
#2.使用百分比进行分组抽样: typicalFracDict = { 1:0.2, 2:0.4, 3:0.6 } def typicalSampling(group,typicalFracDict): name = group.name frac = typicalFracDict[name] return group.sample(frac=frac)
result = df.groupby('class',group_keys=False).apply(typicalSampling,typicalFracDict) |
|
更多学习资料可关注gzitcast获取(weiixn)