这段时间在打一个机器学习比赛,遇到分层抽样的需求。在网上查了一下,虽然也有前辈用pandas写出来过,但代码有很多冗余,于是我又重写了一个超简洁的版本。注释应该还算清晰,各位可以自取。用得好可以给个赞,感谢!

sample_data:原始数据,示例中‘label’列是分层依据
train_proportion:训练集抽取比例,默认70%
seed:随机抽取与打乱顺序时用到的随机数种子,默认为None。当输入一个数字的时候,输出的样本及样本顺序都会固定。

返回的是训练样本和测试样本,两个样本不重叠,且合在一起包含了全部样本。

def stratified_sampling(sample_data, train_proportion=0.7, seed=None):# 分层随机选取训练样本train_sample = sample_data.groupby('label').apply(lambda x: x.sample(frac=train_proportion, random_state=seed))# 上一步得到的样本是按照label聚在一起的,所以这一步需要打乱顺序train_sample = train_sample.sample(frac=1, random_state=seed)train_sample.reset_index(drop=True, inplace=True)# 和原始数据拼接起来,删掉重复值,从而获得测试数据test_sample = pd.concat([sample_data, train_sample]).drop_duplicates(keep=False)# 同样对抽取出的测试样本打乱顺序test_sample = test_sample.sample(frac=1, random_state=seed)test_sample.reset_index(drop=True, inplace=True)return train_sample, test_sample

然而作者写完这段代码才发现sklearn.model_selection里面有train_test_split,可以完全实现上述效果。不过还是需要reset_index

data_train, data_test = train_test_split(data_label, test_size=0.3, random_state=0, stratify=data_label.label)

Python pandas 分层抽样 超简洁相关推荐

  1. python pandas库读取excel/csv中指定行或列数据详解

    通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下 ...

  2. Python pandas用法

    Python pandas用法 无味之味关注 12019.01.10 15:43:25字数 2,877阅读 91,914 介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理. ...

  3. python pandas 独热编码

    python pandas 独热编码 import pandas as pd df1 = pd.DataFrame({'姓名': ['周', '武', '郑'],'成绩': [100, 96, 77] ...

  4. python pandas 读写 csv 文件

    python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...

  5. python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行。

    python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行. import pandas as pd import numpy as np df1 = pd.Data ...

  6. python pandas DataFrame 查找NaN所在的位置

    python pandas DataFrame 查找 NaN 所在的位置 import pandas as pd import numpy as np df1 = pd.DataFrame({'日期' ...

  7. python pandas dataframe 列 转换为离散值

    python pandas dataframe 列 转换为离散值 import pandas as pd import numpy as np df1 = pd.DataFrame({'日期': [' ...

  8. python pandas DataFrame 排序

    python pandas DataFrame 排序 import pandas as pd import numpy as np df1 = pd.DataFrame({'日期': ['2021-7 ...

  9. python pandas DataFrame 字符串转日期格式

    python pandas DataFrame 字符串转日期格式 import pandas as pd import numpy as np df1 = pd.DataFrame({'日期': [' ...

最新文章

  1. 【Spring注解系列06】FactoryBean注入对象用法
  2. c++学习笔记之友元函数
  3. 一次堆外内存泄露的排查过程
  4. virtualbox主机网络管理 未能创建_如何在 VirtualBox 中增加现有虚拟机的磁盘大小 | Linux 中国...
  5. 周华健,歌声伴我成长(三)
  6. datagridview列 值提取_Pandas中的缺失值处理
  7. MySQL级联删除和级联修改
  8. Bugku-Web-Cookies欺骗
  9. matplotlib实现数据的可视化
  10. 将 .json 格式 转换成 .xml格式
  11. 计算机网络tcp/ip协议,UDP,HTTP/HTTPS基础知识
  12. 2018最新游戏蛮牛Egret游戏引擎
  13. mac安静执行脚本_自动切换mac输入法-安静模式
  14. 二维码名片页面的样式设计
  15. ulimit修改open files永久生效
  16. 高德地图标识大全_连地震都查得一清二楚!高德地图新功能体验
  17. java使用环信信息推送,环信推送详解
  18. 2011年新的个人纳税情况
  19. python to_excel 时间格式_分别用Excel和python进行日期格式转换成时间戳格式
  20. 复测前端BUG一定要清缓存吗?

热门文章

  1. 面包师问题--进程同步问题
  2. 苹果6现在多少钱_2020年苹果价格多少钱一斤?苹果种植成本利润分析
  3. SSD 4K对齐正确做法是这样!
  4. 小台灯内部电路原理图,仅供参考(实际测量自己的台灯的输入电压是直流135V。时间2021.3.9)
  5. 扒一扒Xcode中的编译标识: -Werror= -Wunused-variable
  6. SpringBoot启动图案大全
  7. Java 求解买卖股票时机含冷冻期
  8. chinapay支付接口php,PHP/Java Bridge实现ecshop的chinapay支付接口方法(2)
  9. Oracle数据库实例之内存架构(一)
  10. 拜登承诺将把GDP的“近2%”用于科学研究;机器学习显示出增强量子信息传输的潜力|全球量子科技与工业快讯第十四期