【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

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三