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

详解 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

http://www.kler.cn/news/308530.html

相关文章:

  • PHP智能化云端培训考试系统小程序源码
  • YOLOv5 Detect.py 改变检测框box线条的粗细,隐藏检测框的检测信息,只显示检测框box
  • PHP在现代Web开发中的高效应用与最佳实践
  • Linux杂项知识
  • 深入解析:如何通过网络命名空间跟踪单个进程的网络活动(C/C++代码实现)
  • Vue3.0组合式API:setup()函数
  • SpringBoot 消息队列RabbitMQ在代码中声明 交换机 与 队列使用注解创建
  • Linux | 进程间通信:管道、消息队列、共享内存与信号量
  • 快速排序
  • 《Oracle(一)- 基础》
  • 【webpack4系列】编写可维护的webpack构建配置(四)
  • COTERRORSET—— LLM训练新基准让模型从自身错误中学习
  • 情系河北 缘聚苏州——2024苏州河北同乡迎国庆贺中秋大团圆联谊活动圆满举办
  • 学习笔记缓存篇(一)
  • HarmonyOS使用LocationButton获取地理位置
  • GBase 8s数据类型与java.sql.Types对应关系
  • 初识网络原理
  • 前端基于Rust实现的Wasm进行图片压缩的技术文档
  • 中间件常见漏洞
  • android API、SDK与android版本
  • 【Qt | QLineEdit】Qt 中使 QLineEdit 响应 鼠标单击、双击事件 的两个方法
  • php语言基本语法
  • 若依的使用
  • LeetCode:1184. 公交站间的距离 一次遍历数组,复杂度O(n)
  • Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声
  • 【我的 PWN 学习手札】Unsortedbin Attack
  • Chrome谷歌浏览器登录账号next无反应
  • C++ 重点的关键字
  • vue嵌入第三方页面
  • Java中分布式锁