【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

相关文章

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件