第五天 用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)

汇总代码展示如下

python 复制代码
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)
相关推荐
丁浩66621 分钟前
Python机器学习---2.算法:逻辑回归
python·算法·机器学习
B站_计算机毕业设计之家43 分钟前
计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
大数据·爬虫·python·机器学习·信息可视化·课程设计·农业
Q_Q5110082851 小时前
python+uniapp基于微信小程序的旅游信息系统
spring boot·python·微信小程序·django·flask·uni-app·node.js
鄃鳕1 小时前
python迭代器解包【python】
开发语言·python
懷淰メ2 小时前
python3GUI--模仿百度网盘的本地文件管理器 By:PyQt5(详细分享)
开发语言·python·pyqt·文件管理·百度云·百度网盘·ui设计
Q_Q5110082852 小时前
python基于web的汽车班车车票管理系统/火车票预订系统/高铁预定系统 可在线选座
spring boot·python·django·flask·node.js·汽车·php
新子y2 小时前
【小白笔记】普通二叉树(General Binary Tree)和二叉搜索树的最近公共祖先(LCA)
开发语言·笔记·python
囚生CY2 小时前
【速写】优化的深度与广度(Adam & Moun)
人工智能·python·算法
Query*2 小时前
Java 设计模式——工厂模式:从原理到实战的系统指南
java·python·设计模式
爱学习的uu2 小时前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程