当前位置: 首页 > 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…...

一键获取B站完整评论区数据:告别数据采集烦恼的终极方案

一键获取B站完整评论区数据&#xff1a;告别数据采集烦恼的终极方案 【免费下载链接】BilibiliCommentScraper 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCommentScraper 还在为B站评论数据采集不完整而烦恼吗&#xff1f;想要批量获取视频评论区信息却无从…...

CosyVoice3在CSDN星图一键部署:开箱即用,无需复杂配置

CosyVoice3在CSDN星图一键部署&#xff1a;开箱即用&#xff0c;无需复杂配置 1. 引言&#xff1a;语音克隆技术的新选择 你是否曾经想过&#xff0c;只需几秒钟的录音就能让AI完美复刻你的声音&#xff1f;或者为你的视频内容添加多种方言配音&#xff1f;CosyVoice3作为阿里…...

Label Studio 视频标注实战:解决动态追踪、效率低下的5个进阶策略

Label Studio 视频标注实战&#xff1a;解决动态追踪、效率低下的5个进阶策略 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/label-st…...

3个魔法时刻:如何让Switch手柄在PC上获得新生

3个魔法时刻&#xff1a;如何让Switch手柄在PC上获得新生 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_mirro…...

Qwen3-VL-4B-Instruct:多模态视觉语言模型的技术演进与实践指南

Qwen3-VL-4B-Instruct&#xff1a;多模态视觉语言模型的技术演进与实践指南 【免费下载链接】Qwen3-VL-4B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-VL-4B-Instruct 技术突破&#xff1a;重新定义多模态交互范式 Qwen3-VL-4B-Instruct作为…...

新手避坑指南:给UR机械臂选配RealSense D435相机,这5个参数千万别看错

新手避坑指南&#xff1a;给UR机械臂选配RealSense D435相机&#xff0c;这5个参数千万别看错 第一次为UR机械臂选配深度相机时&#xff0c;我盯着RealSense D435的参数表发呆了半小时——那些专业术语像天书一样。直到项目因选型错误延误两周后&#xff0c;我才明白参数表里藏…...

轻量级OpenClaw方案对比:nanobot与标准部署性能测试

轻量级OpenClaw方案对比&#xff1a;nanobot与标准部署性能测试 1. 测试背景与动机 最近在为一台闲置的2核4G云主机寻找合适的自动化方案时&#xff0c;我遇到了一个典型的技术选型问题&#xff1a;标准OpenClaw部署对资源要求较高&#xff0c;而新出现的nanobot方案号称是&q…...

揭秘APP签名信息:如何快速获取MD5、SHA1和SHA256值

1. 为什么需要获取APP签名信息&#xff1f; 当你下载一个APP时&#xff0c;有没有想过如何确认它真的是官方发布的版本&#xff1f;或者作为开发者&#xff0c;如何确保自己打包的APK没有被篡改&#xff1f;这些问题的答案都藏在APP的签名信息里。签名信息就像APP的"身份证…...

嵌入式LED控制库:裸机/RTOS下的确定性状态管理

1. 项目概述"FonctionLED" 是一个面向嵌入式微控制器的轻量级 LED 控制函数库&#xff0c;其设计目标并非提供图形化界面或高级动画引擎&#xff0c;而是聚焦于底层硬件操作的可靠性、可预测性与最小资源占用。从项目标题&#xff08;法语“LED功能”&#xff09;和摘…...

硬件工程师的‘工具箱’进化史:从万用表到示波器,再到我离不开的5款效率神器

硬件工程师的效率革命&#xff1a;5款改变工作流的现代工具解析 十年前&#xff0c;我的工作台上堆满了各种笨重的测试设备&#xff0c;笔记本里塞满手绘的电路图和潦草的调试记录。如今&#xff0c;当我走进新一代硬件工程师的实验室&#xff0c;发现他们的工作方式已经发生了…...