【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用

2024-06-22 11:52

本文主要是介绍【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 相关内容文档获取 微信公众号
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 🎯 1. 基本介绍
  • 💡 2. 使用方法
      • 2.1 cut函数使用
      • 2.2 qcut函数使用
      • 2.3 高级用法
      • 2.4 和fillna连用
  • 🔍 3. 注意事项
  • 🔧 4. 总结

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1. 基本介绍

  对于分箱操作,在处理连续数据的特征工程时经常会用到,特别是在用户评分模型里面用的贼多,但是使用最优分箱进行数值离散化比较多。
  在数据分析中,经常需要根据某些特征将数据分组,并在每个组内执行计算或分析。Pandas 提供了 groupby 功能来实现这一点。此外,qcut 可用于将连续数据分箱为离散区间,而 fillna 用于填充数据中的缺失值。

💡 2. 使用方法

2.1 cut函数使用

  在进行特征工程时,经常需要按照一定的规则进行统计特征提取,这个gropuby操作和hadoop的mapreduce有一定的相似,groupby可以理解为对数据进行拆分再进行应用再进行合并,当理解了之前介绍的几个骚函数以及一些常用的统计函数然后如果能想象的到groupby之后的数据结构,基本就可以开始你无限的骚操作了,不管是解决产品经理的数据报告需求还是特征提取基本问题不大了,下面介绍一些个人比较喜欢用的操作:

import pandas as pddf = pd.DataFrame({'a': ['A', 'B', 'A', 'C', 'B', 'C', 'A'],'b': [1, 2, 3, 4, 5, 6, 7],'c': [10, 20, 30, 40, 50, 60, 70]
})a         b
0  12.05155  49.744408
1  67.84977  33.425537
2  53.72848  91.631309
3  45.52130  22.993242
4  28.46236  53.725090

  使用 pd.cut列进行分箱。

# 为等距分箱
bins_1 = pd.cut(df['a'], 4)
print("等距分箱结果:")
print(bins_1.value_counts())
等距分箱结果:a  count
0  (29.071, 52.552]     31
1  (52.552, 76.032]     25
2   (5.497, 29.071]     22
3  (76.032, 99.513]     22

2.2 qcut函数使用

  使用 pd.qcut列进行分箱,注意里面的参数labels为是否显示具体为:

# 为等频分箱
bins_2 = pd.qcut(df['a'], 4)
print("\n等频分箱结果:")
print(bins_2.value_counts())等频分箱结果:a  count
0   (0.197, 28.495]     25
1  (28.495, 49.768]     25
2   (49.768, 72.88]     25
3   (72.88, 98.583]     25

2.3 高级用法

   按箱子分组并应用统计函数。使用 groupby 和 apply 对 ‘b’ 列按箱子分组,并应用 help_static 函数。具体的用法如下所示:

def help_static(group):return {'max': group.max(),'mean': group.mean(),'count': group.count()}
# 等距分箱统计
temp_1 = df.groupby(bins_1).apply(help_static).unstack()
print("\n等距分箱统计结果:")
print(temp_1)# 等频分箱统计
temp_2 = df.groupby(bins_2).apply(help_static).unstack()
print("\n等频分箱统计结果:")
print(temp_2)等距分箱统计结果:max       mean  count
0  89.668916  42.667183    25
1  96.302655  55.310322    25
2  95.345022  59.836174    25
3  97.875800  76.837120    25等频分箱统计结果:max       mean  count
0   98.989428  46.483636    25
1   99.994949  67.079796    25
2  100.000000  87.500000    25
3   99.999998  98.000000     1  # 注意:最顶端可能只有一个数据点

  

2.4 和fillna连用

  • 对于空值,在进行特征工程时,如果空值缺比较多的时候,常将这一列删除,如果缺的20%左右,要不就不对其进行处理,
  • 将它当做一种情况看待,或者对空值进行填充,为了更加的使填充值得误差尽可能得小,如果一个id有多条样本,则可以对其进行分组后在填充,不然就用整体分布值进行填充。
  • 在数据分析中,处理缺失值是一个常见且重要的任务。Pandas 提供了多种方法来填充缺失值,包括使用统计方法(如中位数)或数学模型(如线性插值)。
import pandas as pd
import numpy as np# 创建包含缺失值的 DataFrame
df = pd.DataFrame({'a': ['A', 'B', 'A', 'B', 'A', 'B', 'A'],'b': [1, 2, np.nan, 4, 5, np.nan, 7]
})# 对列a分组后对列b中的空值用用中位数填充 
fuc_nan_median = lambda x: x.fillna(x.median())# 对列 'b' 分组后填充缺失值
df_median_filled = df.groupby('a')['b'].apply(fuc_nan_median).reset_index()
print(df_median_filled)a    b
0  A  4.0
1  B  3.0
2  A  4.0
3  B  3.0
4  A  4.0
5  B  3.0
6  A  4.0

  定义一个 lambda 函数,使用插值方法填充缺失值。

func_nan_interpolate = lambda x: x.interpolate()# 对列 'b' 分组后使用线性插值填充缺失值
df_interpolated = df.groupby('a')['b'].apply(func_nan_interpolate).reset_index()
print(df_interpolated)a    b
0  A  1.0
1  B  2.0
2  A  3.5
3  B  4.0
4  A  5.5
5  B  NaN # 注意:由于B组最后一个值后没有数据,插值无法进行
6  A  7.0

🔍 3. 注意事项

  对上述的各个函数在使用的过程中需要注意的一些事项,不然可能会出现error,具体主要为:

  • 在使用 fillna 时,确保使用中位数或其他统计量填充是有意义的,并且适用于数据的分布特性。
  • interpolate 方法提供了多种插值方法,如 ‘linear’, ‘polynomial’ 等,可以通过 method 参数指定。
  • 使用 groupby 后,如果直接对结果使用 reset_index,可能会得到一个额外的列(如 ‘level_1’),这列可能需要被删除。
  • 在使用 pd.cut 或 pd.qcut 时,labels=False 表示返回的分箱标签是数字而不是字符串。
  • groupby.apply 可以应用任何函数,包括自定义函数,返回的结果将根据函数返回的数据结构进行调整。
  • 使用 unstack 可以调整多级列索引的布局,使其更易于理解。

🔧 4. 总结

  本文介绍了如何使用 Pandas 对数值型数据进行分箱,并在每个箱子中统计另一列的统计特征。通过实际的代码示例,展示了等距分箱和等频分箱的方法,以及如何定义自定义函数来计算所需的统计量。这些技术在数据分析中非常有用,特别是在处理分布不均匀的数据时。希望这篇博客能够帮助你更好地理解并应用 Pandas 的分箱和分组统计功能。
  展示了如何使用中位数和插值方法来填充缺失值,并提供了相应的代码示例和输出结果。这些技术对于数据清洗和准备阶段非常重要,可以帮助提高数据分析的质量和准确性。希望这篇博客能够帮助你更好地理解并应用这些功能。

这篇关于【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084216

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(