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

python3 DataFrame一些好玩且高效的操作

pandas在处理Excel/DBs中读取出来,处理为DataFrame格式的数据时,处理方式和性能上有很大差异,下面是一些高效,方便处理数据的方法。

  1. map/apply/applymap
  2. transform
  3. agg
  4. 遍历
  5. 求和/求平均
  6. shift/diff
  7. 透视表
  8. 切片,索引,根据字段值取数据

数据准备:

import pandas as pd
from datetime import date
import numpy as np
begin_date = date(2023, 3, 1)
end_date = date(2023, 3, 7)
time_list = [d_date.date() for d_date in pd.date_range(begin_date, end_date)]
print(time_list)
# 小黄,小红,小绿三个员工,3月1号到7号之间的销售额数据
df2 = pd.DataFrame({'name': ['小黄', '小黄', '小黄', '小黄', '小黄', '小黄', '小黄', '小红', '小红', '小红', '小红', '小红', '小红', '小红', '小绿', '小绿', '小绿', '小绿', '小绿', '小绿'], 'd_date': [*time_list, *time_list, *time_list[:6]], 'value': np.random.randint(500, 5000, size=20)})
  1. map/apply/applymap的用法介绍
# 计算每个员工,在当天的总销售额的占比
sell_money_sum_s = df2.groupby('d_date')['value'].sum()
df3 = sell_money_sum_s.reset_index().rename(columns={'value': 'sum'})

在这里插入图片描述

df4 = pd.merge(df2, df3, on='d_date', how='left')

在这里插入图片描述

df4['ratio'] = df4['value'] / df4['sum']

在这里插入图片描述

# Series.map:针对列元素进行操作,处理完之后还是返回一个Series
# 将销售额占比格式化成百分数并保留两位小数
df4['ratio_percent'] = df4['ratio'].map(lambda x: '%.2f%%' % (x * 100))

在这里插入图片描述

# apply:对DataFrame的多列进行操作
# 对每个元素进行以万元为单位进行展示
df4[['value(万元)', 'sum(万元)']] = df4[['value', 'sum']].apply(lambda x: x / 10000)

在这里插入图片描述

# 将销售数据(万元),按列汇总,使用参数axis=0
df4[['value(万元)', 'sum(万元)']].apply(lambda x: x.sum(), axis=0)

在这里插入图片描述

# 将销售数据(万元),按行汇总,使用参数axis=1
df4[['value(万元)', 'sum(万元)']].apply(lambda x: x.sum(), axis=1)

在这里插入图片描述

# applymap函数是df的函数,对比于Series.map,针对处理数据集中每一个元素
df4.applymap(lambda x: f'___{x}___')

在这里插入图片描述
2. transform
通常如果像上述那样,计算每日销售额占比数据,需要先分组求和,再通过一些字段,比如d_date,将两组数据merge,通过列计算,得到占比。但是transform有更简洁的操作。

df6 = df2.copy()

在这里插入图片描述

df6['sum'] = df6.groupby('d_date')['value'].transform('sum')

在这里插入图片描述

df6['ratio'] = df6['value'] / df6['sum']

可以得到每个人,每天销售额的占比情况
在这里插入图片描述
3. agg
在指定轴上对一列或多列进行聚合

df7 = df2.copy()
# agg函数比较常见的使用场景,分组,对每组数据的聚合(求和/最大值/最小值/均值等)运算
df7.groupby('d_date').agg({'name': 'last', 'd_date': 'last', 'value': 'max'})

在这里插入图片描述

# agg同样可以对一列或者多列进行求和
df7['value'].agg('sum', axis=0)

在这里插入图片描述

# 如果我们想一次求出每天的销售额的最大值和最小值
df7.groupby('d_date').agg({'value': ['max', 'min']}).reset_index()

在这里插入图片描述
4. 遍历
iterrows(): 将DataFrame迭代为(insex, Series)对。
itertuples(): 将DataFrame迭代为元祖。
iteritems(): 将DataFrame迭代为(列名, Series)对
5. 求和/求平均
数据准备:

df_sum_mean = df2.copy()
# 分组求和,只保留分组字段和求和数据
df_sum_mean.groupby('d_date')['value'].sum().reset_index()

在这里插入图片描述

# 分组求和,保留原始记录的条数
df_sum_mean['sum'] = df_sum_mean.groupby('d_date')['value'].transform('sum')
df_sum_mean

在这里插入图片描述

# 对多列进行聚合操作
df_sum_mean.groupby('d_date').agg({'name': 'last', 'value': 'max', 'sum': 'last'}).reset_index()

在这里插入图片描述
6. shift/diff
shift:可以使用shift()方法对DataFrame对象的数据进行位置的前滞、后滞移动。
语法:

DataFrame.shift(periods=1, freq=None, axis=0)

periods可以理解为移动幅度的次数,shift默认一次移动1个单位,也默认移动1次(periods默认为1),则移动的长度为1 *
periods。 periods可以是正数,也可以是负数。负数表示前滞,正数表示后滞。
freq是一个可选参数,默认为None,可以设为一个timedelta对象。适用于索引为时间序列数据时。
freq为None时,移动的是其他数据的值,即移动periods*1个单位长度。
freq部位None时,移动的是时间序列索引的值,移动的长度为periods * freq个单位长度。
axis默认为0,表示对列操作。如果为行则表示对行操作。 移动滞后没有对应值的默认为NaN。

diff:dataframe.diff()用于查找对象在给定axis上的第一个离散差值。我们可以提供一个周期值来转移,以形成差异。
语法:

DataFrame.diff(periods=1, axis=0)

periods:形成差异的时期,要进行转移。
axis:在行(0)或列(1)上取差。

数据准备:

df_shift = df2.copy()
df_sell_amount = df_shift.groupby('d_date')['value'].sum().reset_index()
df_sell_amount.rename(columns={'value': 'amount'}, inplace=True)
# 查看每日销售额相较于前一天的变化幅度
df_sell_amount['amplification'] = df_sell_amount['amount'] / df_sell_amount.shift()['amount'] - 1

在这里插入图片描述

# 更简单的方法
df_sell_amount['amount'].pct_change()

在这里插入图片描述

透视表
切片,索引,根据字段值取数据

相关文章:

python3 DataFrame一些好玩且高效的操作

pandas在处理Excel/DBs中读取出来,处理为DataFrame格式的数据时,处理方式和性能上有很大差异,下面是一些高效,方便处理数据的方法。 map/apply/applymaptransformagg遍历求和/求平均shift/diff透视表切片,索引&#x…...

如何从 PowerPoint 导出高分辨率(高 dpi)幻灯片

如何从 PowerPoint 导出高分辨率(高 dpi)幻灯片更改导出分辨率设置将幻灯片导出为图片限制你可以通过将幻灯片保存为图片格式来更改 Microsoft PowerPoint 的导出分辨率。 此过程有两个步骤:使用系统注册表更改导出的幻灯片的默认分辨率设置&…...

JAVA数据结构之冒泡排序,数组元素反转,二分查找算法的联合使用------JAVA入门基础教程

//二分查找与冒泡排序与数组元素反转的连用 int[] arr2 new int[]{2,4,5,8,12,15,19,26,29,37,49,51,66,89,100}; int[] po new int[arr2.length]; //复制一个刚好倒叙的数组po for (int i arr2.length - 1; i > 0; i--) {po[arr2.length - 1 - i] arr2[i]; }//arr2 po…...

linux对动态库的搜索知识梳理

一.动态库优先搜索路径顺序 之前的文章我有整理过,这里再列出来一次 1. 编译目标代码时指定的动态库搜索路径; 2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径; 4. 默认…...

R -- 用psych包做因子分析

因子分析 因子分析又称为EFA,是一系列用来发现一组变量的潜在结构的办法。它通过寻找一组更小的,潜在的结构来解释已观测到的显式的变量间的关系。这些虚拟的、无法观测的变量称为因子(每个因子被认为可以解释多个观测变量间共有的方差&…...

既然操作系统层已经提供了page cache的功能,为什么还要在应用层加缓存?

Page Cache是一种在操作系统内核中实现的缓存机制,用于缓存文件系统中的数据块。当一个进程请求读取一个文件时,操作系统会首先在Page Cache中查找数据块,如果找到了相应的数据块,则直接返回给进程;如果没有找到&#…...

Redis应用问题解决

16. Redis应用问题解决 16.1 缓存穿透 16.1.1 问题描述 key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库…...

Qemu虚拟机读取物理机的物理网卡的流量信息方法

项目背景: 比如我有三个项目 A,B,C;其中A项目部署在物理机上,B,C项目部署在 虚拟机V1,V2中,三个项目接口需要相互调用。 需要解决的问题点: 1,因为A,B&#x…...

面试题之vue的响应式

文章目录前言一、响应式是什么?二、Object.defineProperty二、简单模拟vue三、深度监听四、监听数组总结前言 为了应对面试而进行的学习记录,可能不够有深度甚至有错误,还请各位谅解,并不吝赐教,共同进步。 一、响应式…...

聚焦弹性问题,杭州铭师堂的 Serverless 之路

作者:王彬、朱磊、史明伟 得益于互联网的发展,知识的传播有了新的载体,使用在线学习平台的学生规模逐年增长,越来越多学生在线上获取和使用学习资源,其中教育科技企业是比较独特的存在,他们担当的不仅仅是…...

NDK RTMP直播客户端二

在之前完成的实战项目【FFmpeg音视频播放器】属于拉流范畴,接下来将完成推流工作,通过RTMP实现推流,即直播客户端。简单的说,就是将手机采集的音频数据和视频数据,推到服务器端。 接下来的RTMP直播客户端系列&#xff…...

Python3--垃圾回收机制

一、概述 Python 内部采用 引用计数法,为每个对象维护引用次数,并据此回收不在需要的垃圾对象。由于引用计数法存在重大缺陷,循环引用时由内存泄露风险,因此Python还采用 标记清除法 来回收在循环引用的垃圾对象。此外&#xff0c…...

C/C++开发,认识opencv各模块

目录 一、opencv模块总述 二、opencv主要模块 2.1 opencv安装路径及内容 2.2 opencv模块头文件说明 2.3 成熟OpenCV主要模块 2.4 社区支持的opencv_contrib扩展主要模块 2.5 关于库文件的引用 一、opencv模块总述 opencv的主要能力在于图像处理,尤其是针对二维图…...

【WLSM、FDM状态估计】电力系统状态估计研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

准备2023(2024)蓝桥杯

前缀和 一维前缀和 s[i]s[i-1]a[i]二维前缀和&#xff08;子矩阵的和&#xff09; s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j] 差分 一维数组 //b是差分数组b[i]c;b[j1]-c;例题 #include<iostream> using namespace std; int n,m; int b[100002],a[100002]; vo…...

剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 把n个骰子扔在地上&#xff0c;所有骰子朝上一面的点数之和为s。输入n&#xff0c;打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案&#xff0c;其中第 i 个…...

阿里巴巴-淘宝搜索排序算法学习

模型效能&#xff1a;模型结构优化 模型效能&#xff1a;减枝 FLOPS&#xff1a;每秒浮点运算的次数 模型效能&#xff1a;量化 基于统计阈值限定&#xff0c;基于学习阈值限定。 平台效能&#xff1a;一站式DL训练平台 平台效能&#xff1a;搜索模型的系统流程 协同关系…...

〖Python网络爬虫实战⑮〗- pyquery的使用

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付费…...

SQL综合查询下

SQL综合查询下 目录SQL综合查询下18、查询所有人都选修了的课程号与课程名题目代码题解19、SQL查询&#xff1a;查询没有参加选课的学生。题目代码20、SQL查询&#xff1a;统计各门课程选修人数&#xff0c;要求输出课程代号&#xff0c;课程名&#xff0c;有成绩人数&#xff…...

全连接层FC

lenet结构: 输入层(Input Layer):接收手写数字的图像数据,通常是28x28的灰度图像。 卷积层1(Convolutional Layer 1):对输入图像进行卷积操作,提取低级别的特征,使用 6 个大小为 5x5 的卷积核进行卷积,得到 6 个输出特征图,激活函数为 Sigmoid。 平均池化层1(Aver…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...