【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

相关文章

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令