首页 > 其他分享 >详解 Pandas 的透视表函数

详解 Pandas 的透视表函数

时间:2024-09-16 19:51:30浏览次数:11  
标签:Feb 透视 id Jan 详解 department pivot month Pandas

Pandas 的透视表函数主要为 pivot()pivot_table(),主要的功能为对 DataFrame 的行和列进行重新组合来重塑数据。

一、pivot 函数

pivot 函数只能对数据进行重塑,不能进行聚合

1. 数据准备

import pandas as pd

df1 = pd.DataFrame({
    'department_id': [1, 2, 3, 3, 1, 1],
    'month': ['Jan', 'Jan', 'Jan', 'Feb', 'Feb', 'Mar'],
    'revenue': [8000, 9000, 10000, 7000, 8000, 6000,]
})

df2 = pd.DataFrame({
    'department_id': [1, 1, 2, 3, 3, 1, 2],
    'month': ['Jan', 'Jan', 'Jan', 'Jan', 'Feb', 'Mar', 'Feb'],
    'revenue': [8000, 9000, 10000, 7000, 8000, 6000, 10000]
})

print(df1)
print(df2)
df1
   department_id month  revenue
0              1   Jan     8000
1              2   Jan     9000
2              3   Jan    10000
3              3   Feb     7000
4              1   Feb     8000
5              1   Mar     6000

df2
   department_id month  revenue
0              1   Jan     8000
1              1   Jan     9000
2              2   Jan    10000
3              3   Jan     7000
4              3   Feb     8000
5              1   Mar     6000
6              2   Feb    10000

2. 基本语法

"""
    调用方式一:pd.pivot(df, index=, columns=, values=)
    调用方式二:df.pivot(index=, columns=, values=)
    参数:
       1. index:指定作为行索引的列
       2. columns:指定作为列索引的列
       3. values:指定作为数据值的列
"""
dp = df1.pivot(index="department_id", columns="month", values="revenue")
# dp = pd.pivot(df1, index="department_id", columns="month", values="revenue")
print(dp)

# dp2 = df2.pivot(index="department_id", columns="month", values="revenue") 
# error,Index contains duplicate entries, cannot reshape,存在重复数据,pivot 不能聚合,所以报错
month             Feb      Jan     Mar
department_id                         
1              8000.0   8000.0  6000.0
2                 NaN   9000.0     NaN
3              7000.0  10000.0     NaN

二、pivot_table 函数

pivot_table 函数既能对数据进行重塑,也可以进行聚合

1. 数据准备

import pandas as pd

df1 = pd.DataFrame({
    'department_id': [1, 2, 3, 3, 1, 1],
    'month': ['Jan', 'Jan', 'Jan', 'Feb', 'Feb', 'Mar'],
    'revenue': [8000, 9000, 10000, 7000, 8000, 6000,]
})

df2 = pd.DataFrame({
    'department_id': [1, 1, 2, 3, 3, 1, 2],
    'month': ['Jan', 'Jan', 'Jan', 'Jan', 'Feb', 'Mar', 'Feb'],
    'revenue': [8000, 9000, 10000, 7000, 8000, 6000, 10000]
})

print(df1)
print(df2)
df1
   department_id month  revenue
0              1   Jan     8000
1              2   Jan     9000
2              3   Jan    10000
3              3   Feb     7000
4              1   Feb     8000
5              1   Mar     6000

df2
   department_id month  revenue
0              1   Jan     8000
1              1   Jan     9000
2              2   Jan    10000
3              3   Jan     7000
4              3   Feb     8000
5              1   Mar     6000
6              2   Feb    10000

2. 基本语法

"""
    调用方式一:pd.pivot_table(df, index=, columns=, values=, aggfunc=)
    调用方式二:df.pivot_table(index=, columns=, values=, aggfunc=)
    参数:
       1. index:指定作为行索引的列
       2. columns:指定作为列索引的列
       3. values:指定作为数据值的列
       4. aggfunc:指定聚合的函数
"""
dp = pd.pivot_table(df1, index="department_id", columns="month", values="revenue")
# dp = df1.pivot_table(index="department_id", columns="month", values="revenue")
print(dp)
month             Feb      Jan     Mar
department_id                         
1              8000.0   8000.0  6000.0
2                 NaN   9000.0     NaN
3              7000.0  10000.0     NaN
# pivot_table 函数会对重复数据进行聚合,默认是 mean 函数
dp2 = pd.pivot_table(df2, index="department_id", columns="month", values="revenue")
print(dp2)
month              Feb      Jan     Mar
department_id                          
1                  NaN   8500.0  6000.0
2              10000.0  10000.0     NaN
3               8000.0   7000.0     NaN
# 使用 aggfunc 参数指定聚合函数
dp3 = pd.pivot_table(df2, index="department_id", columns="month", values="revenue", aggfunc="sum")
print(dp3)
month              Feb      Jan     Mar
department_id                          
1                  NaN  17000.0  6000.0
2              10000.0  10000.0     NaN
3               8000.0   7000.0     NaN

标签:Feb,透视,id,Jan,详解,department,pivot,month,Pandas
From: https://blog.csdn.net/weixin_44480009/article/details/142306055

相关文章

  • 本地文件包含漏洞详解与CTF实战
    1.本地文件包含简介1.1本地文件包含定义本地文件包含是一种Web应用程序漏洞,攻击者通过操控文件路径参数,使得服务器端包含了非预期的文件,从而可能导致敏感信息泄露。常见的攻击方式包括:包含配置文件、日志文件等敏感信息文件,导致信息泄露。包含某些可执行文件或利用文件上......
  • 碰撞检测:详解矩形AABB与OBB碰撞检测算法(附ROS C++可视化)
    碰撞检测:详解矩形AABB与OBB碰撞检测算法(附ROSC++可视化)引言在机器人、游戏开发、计算机图形学等领域,碰撞检测是一个至关重要的任务。碰撞检测的目的是确定两个或多个物体是否发生了碰撞,以便采取相应的措施,如避免碰撞、触发事件等。在二维空间中,矩形是最常见的几何形状之一,而AABB(Ax......
  • 以太网PHY芯片详解
    以太网PHY芯片详解什么是phyphy的基本作用收到MAC过来的数据(PHY没有帧的概念,都是数据而不管什么地址数据还是CRC),进行处理,然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去。实现CSMA/CD(多点接入载波监听/冲突检测)的部分功能,可以检......
  • 贪心算法(算法详解+模板+例题)
    1.贪心是什么贪心算法(GreedyAlgorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好的策略。虽然这种策略并不保证一定能得到全局最优解,但在许多情况下,它能提供近似最优解,而且计算效率高。贪心算法通常适用于那些具有“最优......
  • Depth靶机详解
    靶机下载地址https://www.vulnhub.com/entry/depth-1,213/主机发现arp-scan-l端口扫描nmap-sV-A-T4192.168.229.156端口利用http://192.168.229.156:8080/目录扫描dirb"http://192.168.229.156:8080"dirsearch-u"http://192.168.229.156:8080"......
  • Dina靶机详解
    靶机下载https://www.vulnhub.com/entry/dina-101,200/靶机配置默认是桥接模式,切换为NAT模式后重启靶机主机发现arp-scan-l端口扫描nmap-sV-A-T4192.168.229.157发现80端口开启,访问访问网站目录扫描pythondirsearch.py-uhttp://192.168.229.157:8......
  • (CS231n课程笔记)深度学习之损失函数详解(SVM loss,Softmax,熵,交叉熵,KL散度)
    学完了线性分类,我们要开始对预测结果进行评估,进而优化权重w,提高预测精度,这就要用到损失函数。损失函数(LossFunction)是机器学习模型中的一个关键概念,用于衡量模型的预测结果与真实标签之间的差距。损失函数的目标是通过提供一个差距的度量,帮助模型进行优化,最终减少预测误差。......
  • MySQL8.0直方图详解
    1、什么是直方图MySQL8.0开始支持索引之外的数据分布统计信息可选项。它就是直方图(Histogram)。直方图通过估算查询谓词的选择率,以便选择合适的执行计划,也让SQL优化有了更多手段。在DB中,优化器负责将SQL转换为很多个不同的执行计划,然后从中选择一个最优的来实际执行。但是有时候优......
  • 常用的运维工具:文件传输工具详解(SCP, SFTP)
    在信息技术(IT)运维中,文件传输是日常工作中不可或缺的一部分。运维工程师需要高效、安全地在不同服务器之间传输文件,以确保系统的正常运行和数据的完整性。本文将详细介绍两种常用的文件传输工具——SCP(SecureCopyProtocol)和SFTP(SecureFileTransferProtocol),帮助读者更好......
  • ICM20948 DMP代码详解(24)
    接前一篇文章:ICM20948DMP代码详解(23) 上一回解析完了inv_icm20948_set_lowpower_or_highperformance函数,本回回到inv_icm20948_initialize_lower_driver函数中,继续往下解析。为了便于理解和回顾,再次贴出inv_icm20948_initialize_lower_driver函数源码,在EMD-Core\sources\Inv......