第五天 用Python批量处理Excel文件,实现自动化办公

用Python批量处理Excel文件,实现自动化办公

一、具体需求

有以下N个表,每个表的结构一样,如下:

需要把所有表数据汇总,把每个人的得分、积分分别加起来,然后按总积分排名,总积分一致时,名次一致且非连续排序;积分一致的前提下,按总得分降序展示,但不改变排名,结果如下:

二、Python开发

1、导入所需的包

import pandas as pdimport glob

2、获取所有Excel文件的文件路径

excel_files = glob.glob("./样例数据/*.xlsx")

3、将各表数据合并到主DataFrame

# 初始化一个空DataFramemerged_df = pd.DataFrame()
# 循环读取每个Excel文件并合并到DataFramefor file in excel_files:    df = pd.read_excel(file, header=1)  # 读取Excel文件,跳过第一行数据    merged_df = merged_df._append(df, ignore_index=True)  # 合并到主DataFrame

4、计算总积分和总排名

merged_df['总得分'] = merged_df.groupby('姓名')['月度得分'].transform('sum')  # 计算得分总和merged_df['总积分'] = merged_df.groupby('姓名')['积分'].transform('sum')  # 计算积分总和merged_df.drop_duplicates(subset=['姓名', '总积分'], keep='first', inplace=True)  # 去重

5、以总积分排名

merged_df['总排名'] = merged_df['总积分'].rank(ascending=False, method='min')

6、按总积分列的值进行排序,重置索引

merged_df = merged_df.sort_values(by=['总积分','总得分'], ascending=[False,False]).reset_index(drop=True)

7、获取需要输出的结果​​​​​​​

result_df = pd.DataFrame()result_df = merged_df.loc[:, ['姓名','总得分','总积分','总排名']].copy()

8、将合并后的DataFrame输出到一个新Excel文件

result_df.to_excel("总积分及排名.xlsx", index=False)

汇总代码展示如下

import pandas as pd

import glob


excel_files = glob.glob("./样例数据/*.xlsx")


# 初始化一个空DataFrame
merged_df = pd.DataFrame()

# 循环读取每个Excel文件并合并到DataFrame  append() 方法在DataFrame的末尾添加一行或一列数据 新版本修改为 _append()
for file in excel_files:
    df = pd.read_excel(file, header=1)  # 读取Excel文件,跳过第一行数据
    merged_df = merged_df._append(df, ignore_index=True)  # 合并到主DataFrame


merged_df['总得分'] = merged_df.groupby('姓名')['月度得分'].transform('sum')  # 计算得分总和
merged_df['总积分'] = merged_df.groupby('姓名')['积分'].transform('sum')  # 计算积分总和
merged_df.drop_duplicates(subset=['姓名', '总积分'], keep='first', inplace=True)  # 去重

merged_df['总排名'] = merged_df['总积分'].rank(ascending=False, method='min')


merged_df = merged_df.sort_values(by=['总积分','总得分'], ascending=[False,False]).reset_index(drop=True)


result_df = pd.DataFrame()
result_df = merged_df.loc[:, ['姓名','总得分','总积分','总排名']].copy()

result_df.to_excel('./样例数据/总排名.xlsx', index=False)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/183535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter学习(四)如何取消listview的越界效果

背景 在flutter的开发过程中,ListView是很常见的一个组件,但是,由于ListView的某些自带的体验,导致不太好的用户体验。例如ListView中,滑动到顶部或者底部的时候,再次滑动,会有越界的效果&…

Keil工程打开发现目标芯片无法选择解决方案

买了一个开发板,配套有一些底层驱动的例程,打开后发现目标芯片无法选择,对应的下载Flash FLM文件也无法选择。从提示框中可以知道所提供的例程是Keil4的例程,我电脑上安装的Keil版本是Keil版本,估计是这个原因导致工程…

机器人制作开源方案 | 智能图书搬运机器人

作者:张宸豪 戚益凡 陈世达 高梓钦 谭清 单位:华北科技学院 指导老师:罗建国 韩红利 阅读对于学生的重要性毋庸置疑,因此图书馆是一个校园非常重要的组成部分,图书馆的书籍借阅,能为学生提供非常大的…

人工智能对网络安全的影响越来越大

如果问当前IT行业最热门的话题是什么,很少有人会回答除了人工智能(AI)之外的任何话题。 在不到 12 个月的时间里,人工智能已经从一项只有 IT 专业人员才能理解的技术发展成为从小学生到作家、程序员和艺术家的每个人都使用的工具…

基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)

一、前言 本项目设计一个大气气压检测装置,该装置以单片机为基础,采用STC89C52作为核心控制芯片,结合BMP180模块作为气压传感器。大气气压,也就是由气体重力在大气层中产生的压力,其变化与天气预报、气象观测以及高度…

Python Pyvis库详解:创建交互式网络图

更多Python学习内容:ipengtao.com 大家好,我是涛哥,今天为大家分享 Python Pyvis库详解:创建交互式网络图,文章4000字,阅读大约15分钟,大家enjoy~~ Pyvis是一个基于JavaScript库NetworkX的Pytho…

【matlab程序】南海土台风画法

【matlab程序】南海土台风画法 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Python海洋专题四】之水深地图图像修饰 【Python海洋专…

U-boot(四):start_armboot

本文主要探讨210的uboot启动的第二阶段,主要函数为start_armboot。 uboot 一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位 二阶段初始化其余硬件(iNand、网卡芯片)以及命令、环境变量等 启动打印硬件信息,进入bootdelay,读秒完后执行bootc…

二十一、文档操作

目录 一、添加文档 1、编写代码 2、运行并查看 二、查询文档 1、编写代码 2、运行并查看 三、删除文档 1、编写代码 2、运行并查看 四、修改文档 方式一:全量修改,会删除旧文档,添加新文档 方式二:局部修改。增量修改&…

nodejs 如何将 Buffer 数据转为 String

问题说明 使用webSocket的时候出现了一个问题,前端小程序和nodejs后端建立websocket连接后,使用send方法发送到后端为buffer格式,以下为我前后端代码 1、前端小程序代码 //创建webSocket连接 const socket uni.connectSocket({url: wss…

工作中死循环害死人

背景:研发的一段代码,循环一直没有跳出,导致其他依赖逻辑有问题,生产事故导致9万左右数据不正常。 这里while(true)真的不要轻易用 ,后来研发改动限制mysql的id切分步长,控制不会有数…

FreeRTOS源码阅读笔记4--semphr.h

信号量是特殊的队列--无法存储消息的队列,相关的接口函数声明在semphr.h中,通过宏定义替换队列函数实现。 4.1创建二值信号量xSemaphoreCreateBinary() 4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE:一个宏,表示创建队列的…

gitt开源项目的意义,公司为什么会对在gitt上有开源项目的人更大机会

Git是一种分布式版本控制系统,它可以帮助程序员管理代码的历史版本和协同工作。同时,Git也成为了开源项目的主要托管平台之一。Git的开源项目意义重大,因为这种开源项目托管平台可以帮助开发者将代码和项目分享给全球的开发者,并且…

node版本管理工具-nvm

1、 下载地址 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.11 2、 选择安装地址不能有空格,中文 3、 使用命令

微服务学习(十二):安装Minio

微服务学习(十二):安装Minio 一、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统,非常适合于存储大容量非结构化的数据,例如图片、视…

linux上的通用拍照程序

最近因为工作需要,在ubuntu上开发了一个拍照程序。 为了找到合适的功能研究了好几种实现方式,在这里记录一下。 目录 太长不看版 探索过程 v4l2 QT opencv4.2 打开摄像头 为什么不直接打开第一个视频节点 获取所有分辨率 切换摄像头 太长不看…

MySQL错误之ONLY_FULL_GROUP_BY

报错信息: 翻译: 对该报错的解释 所以,实际上该报错是由于在SQL查询语句中有group by,而这个包含group by的SQL查询写的并不规范导致的,这个ONLY_FULL_GROUP_BY模式开启之后检查就会很严格,如果select列表…

51单片机IO口的四种工作状态切换

51单片机IO口的四种工作状态切换 1.概述 这篇文章介绍单片机IO引脚的四种工作模式,每个模式都有各自的用武之地,后面在驱动外设硬件时会用它不同的模式。 2.IO口四种工作模式介绍 PnM1PnM0I/O口工作模式00准双向口:灌电流达20mA&#xff…

leetcode:合并两个有序链表

题目描述 题目链接:21. 合并两个有序链表 - 力扣(LeetCode) 题目分析 这个算法思路很简单:就是直接找小尾插 定义一个tail和head,对比两个链表结点的val,小的尾插到tail->next,如果一个链表…

ebpf实战(一)-------监控udp延迟

问题背景: 为了分析udp数据通信中端到端的延迟,我们需要对整个通信链路的每个阶段进行监控,找出延迟最长的阶段. udp接收端有2个主要路径 1.数据包到达本机后,由软中断处理程序将数据包接收并放入udp socket的接收缓冲区 数据接收流程 2. 应用程序调用recvmsg等a…