pandas 进阶(四)

简介: 本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 pandas 高级,读本文之前建议先修:pandas 入门,pandas 高级

5.分组聚合

首先来创建数据:

import numpy as np
import pandas as pd
# 准备数据
df = pd.DataFrame(data = {'sex':np.random.randint(0, 2, size = 300), # 0男,1女
                          'class':np.random.randint(1, 9, size = 300),# 1~8八个班
                          'Python':np.random.randint(0, 151, size = 300),# Python成绩
                          'Keras':np.random.randint(0, 151, size =300),# Keras成绩
                          'Tensorflow':np.random.randint(0, 151, size = 300),
                          'Java':np.random.randint(0, 151,size = 300),
                          'C++':np.random.randint(0, 151, size = 300)})
df['sex'] = df['sex'].map({0:'男', 1:'女'})             # 将0,1映射成男女
df

10.png

5.1 分组

🚩根据性别分组并求出平均值,并把平均值保留一位小数:

df.groupby(by = 'sex').mean().round(1)

image.png

分组统计男女的数量:

df.groupby(by = 'sex').size()

image.png

根据性别和班级两个属性进行分组:

df.groupby(by = ['sex', 'class']).size()

image.png

获取每个班,男生女生Python,Java最高分

df.groupby(by = ['sex', 'class'])[['Python', 'Java']].max()

11.png

我们通过多层索引的思想对上述代码稍作调整:

df.groupby(by = ['class', 'sex'])[['Python', 'Java']].max()

image.png

再用之前学过的数据重塑,又可以稍加变形:

df.groupby(by = ['class', 'sex'])[['Python', 'Java']].max().unstack()

image.png

5.2 分组聚合apply、transform

🚩apply

返回的是汇总后的情况,对于每一个分组大类都只返回一个结果:

df.groupby(by = ['class','sex'])[['Python','Keras']].apply(np.mean).round(1)

12.png

transform是把所有的元素全部返回:

df.groupby(by = ['class','sex'])[['Python','Keras']].transform(np.mean).round(1)

image.png

5.3 分组聚合agg

🚩agg 比起 apply 和 transform 来说,功能更加的强大

# 按照班级和性别进行划分,统计 Tensorflow 和 Keras 这两门学科的最大值,最小值,个数
df.groupby(by = ['class','sex'])[['Tensorflow','Keras']].agg(
    [np.max, np.min, pd.Series.count])

13.png

# 分组后不同属性应用多种不同统计汇总
# 对 Python 计算最大值和最小值
# 对 Keras 计数和计算中位数
df.groupby(by = ['class','sex'])[['Python','Keras']].agg(
    {'Python':[('最大值',np.max),('最小值',np.min)],
     'Keras':[('计数',pd.Series.count),('中位数',np.median)]})

14.png

5.4 透视表pivot_table

🚩所谓透视,其实就是发现事物的一定规律

def count(x):
    return len(x)
df.pivot_table(values=['Python', 'Keras', 'Tensorflow'],# 要透视分组的值
               index=['class', 'sex'], # 分组透视指标,相当于之前的 by
               aggfunc={'Python':[('最大值', np.max)], # 聚合运算
                        'Keras':[('最小值', np.min),('中位数', np.median)],
                        'Tensorflow':[('最小值', np.min),('平均值', np.mean),('计数', count)]})

15.png

6.数据可视化

🚩修本章节之前需要安装matplotlib,建议先修:matplotlib的安装教程以及简单调用

6.1 线形图

df1 = pd.DataFrame(data = np.random.randn(1000, 4),
                  index = pd.date_range(start = '23/1/2022', periods = 1000),
                  columns=list('ABCD'))
df1.cumsum().plot()

image.png

6.2 条形图

df2 = pd.DataFrame(data = np.random.rand(10, 4),
                   columns = list('ABCD'))
display(df2.plot.bar(stacked = True)) # stacked 堆叠
display(df2.plot.bar(stacked = False))# stacked 不堆叠

16.png

6.3 饼图

# 饼图用来表示百分比,百分比是自动计算的,颜色可以更换
df3 = pd.DataFrame(data = np.random.rand(4, 2),
                   index = list('ABCD'),
                   columns = ['One', 'Two'])
# subplots 表示两个图,多个图
# figsize 表示尺寸
df3.plot.pie(subplots = True,figsize = (8, 8))

17.png

更换颜色:

# 更换颜色
df3 = pd.DataFrame(data = np.random.rand(4, 2),
                   index = list('ABCD'),
                   columns = ['One', 'Two'])
df3.plot.pie(subplots = True,figsize = (8, 8),
             colors = np.random.random(size = (4, 3)))

image.png

6.4 散点图

# 横纵坐标,表示两个属性之间的关系
df4 = pd.DataFrame(np.random.randint(0, 50, size = (50, 4)), columns = list('ABCD'))
display(df4.plot.scatter(x = 'A', y = 'B')) # A和B关系绘制
df4['F'] = df4['C'].map(lambda x : x + np.random.randint(-5, 5, size = 1)[0])
display(df4.plot.scatter(x = 'C', y = 'F'))

18.png

6.5 面积图

df5 = pd.DataFrame(data = np.random.rand(10, 4), 
                   columns = list('ABCD'))
display(df5.plot.area(stacked = True))  # stacked 堆叠
display(df5.plot.area(stacked = False)) # stacked 不堆叠

19.png

同样,我们可以调节它的颜色:

df5 = pd.DataFrame(data = np.random.rand(10, 4), 
                   columns = list('ABCD'))
display(df5.plot.area(stacked = True,
                      color = np.random.rand(4, 3)))
# 解释一下 random.rand(4, 3)
# 3就代表三个颜色:红绿蓝(三基色)
# 4就代表 ABCD

image.png







目录
相关文章
|
27天前
|
机器学习/深度学习 数据可视化 数据处理
Pandas进阶学习:探索更多高级特性与技巧
【4月更文挑战第16天】本文深入探讨Pandas的进阶特性,包括向量化操作、apply方法、数据重塑、布尔索引、多重索引、性能优化和库集成。通过学习,可以提升数据处理效率,如使用布尔条件筛选、CategoricalDtype优化性能、分块处理大数据及与NumPy、Matplotlib、Seaborn和scikit-learn集成。掌握这些技巧能助你更好地挖掘数据价值。
|
8月前
|
SQL 数据可视化 数据挖掘
Python 数据分析(四):Pandas 进阶
Python 数据分析(四):Pandas 进阶
69 0
Python 数据分析(四):Pandas 进阶
|
10月前
|
数据挖掘 数据处理 Python
Pandas进阶:处理缺失数据和数据聚合
在本篇文章中,我们将深入探讨Pandas库中两个重要的数据处理功能:处理缺失数据和数据聚合。
|
存储 SQL 数据挖掘
【python进阶系列之pandas】数据处理的大佬 pandas之数据结构
这里是三岁,速学了pandas,怕自己不会用整理了一下资料,有问题的地方或者不对的希望大家多多指出,批评指正!!! 由于pandas的内容过多我们就把经常使用的进行解析,其他的我们后续逐步添加
322 0
|
数据挖掘 索引 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十三)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
93 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十三)
|
数据挖掘 索引 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十四)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
99 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十四)
|
数据挖掘 索引 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十五)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
177 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十五)
|
数据挖掘 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十六)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
182 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十六)
|
数据挖掘 Java 索引
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十七)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
150 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十七)
|
数据可视化 数据挖掘 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十八)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
88 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—Pandas—pandas进阶(十八)