python笔记14:数据处理之随机抽样

# -*- 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

扫描二维码关注公众号,回复: 4953943 查看本文章

result = df.groupby('class',group_keys=False).apply(typicalSampling,typicalNDict)  
#通过typicalSampling方法中打印的测试方法可以看到,该方法一共被调用了三次(因为一共得到了三个分组DataFrame),result的最终结果是三次调用结果的并集
#注:实际上typicalSampling会调用4次,通过在方法的第一行打印一些内容就可以看到,官方解释:apply在第一列/行上调用func两次,以决定是否可以进行某些优化http://www.cnblogs.com/wkang/p/10150401.html
#奇怪的是:如果不在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) 

猜你喜欢

转载自blog.csdn.net/aiyo92/article/details/86497423