当前位置: 首页 > news >正文

详解 Pandas 的透视表函数

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

一、pivot 函数

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

1. 数据准备

import pandas as pddf1 = 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)
df1department_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     6000df2department_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 pddf1 = 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)
df1department_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     6000df2department_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
http://www.lryc.cn/news/440029.html

相关文章:

  • 基于python+django+vue的农业管理系统
  • 动态内存管理之malloc,free,calloc和realloc函数
  • Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改
  • 【CTF Reverse】XCTF GFSJ1092 easyEZbaby_app Writeup(Android+逆向工程+Java)
  • ubuntu 22.04 ~24.04 如何修改登录背景
  • Andrej Karpathy谈AI未来:自动驾驶、Transformer与人机融合
  • Vue使用query传参Boolean类型,刷新之后转换为String问题
  • 开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界(一)
  • 国学盛典 致敬先贤 《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕
  • sqlgun新闻管理系统
  • react hooks--useState
  • C/C++:优选算法(持续更新~~)
  • 【qt信号槽-6】槽函数不执行的一种原因——未知线程
  • Leetcode面试经典150题-162.寻找峰值
  • Vue组件:模板引用ref属性的使用
  • robomimic基础教程(一)——基本概念
  • 7天速成前端 ------学习日志 (继苍穹外卖之后)
  • 讲课研判:基于教师上课视频文件的综合分析
  • mac 如何开启指定端口供外部访问?
  • Weblogic部署
  • 面向对象设计的五大原则(SOLID 原则)
  • Python和MATLAB及C++信噪比导图(算法模型)
  • App及web反编译方案
  • 学成在线练习(HTML+CSS)
  • istio中使用serviceentry结合egressgateway实现多版本路由
  • Java项目——苍穹外卖(二)
  • 【Python日志功能】三.日志记录方法与多模块日志
  • 在pycharm终端中运行pip命令安装模块时,出现了“你要如何打开这个文件”弹出窗口,是什么状况?
  • Axure多人协调的方式
  • 【深度学习】【OnnxRuntime】【Python】模型转化、环境搭建以及模型部署的详细教程