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

Python Pandas实现导出两个Excel数据集的分组记录数分析

编写Python Pandas代码实现从一个Excel文件中的一个Sheet中的表格里取两个维度字段,根据这两个维度字段的数据分组统计,计算记录数的分组总计值,得到一个包含两个维度字段和记录数字段的分组总计值字段的dataframe,再从另一个Excel文件中的一个Sheet中的表格里取两个维度字段,一个计算记录数的分组数据组成一个dataframe,将这两个字段的对应字段full outer join起来,显示所有字段和两个记录数字段值相减的值,以及相减的值除以第一个dataframe的分组记录数的百分比数值。

import pandas as pd
import numpy as np# 读取第一个Excel文件
df1 = pd.read_excel('file1.xlsx', sheet_name='Sheet1')
# 分组统计记录数(维度字段名需替换为实际字段名)
df1_group = df1.groupby(['维度字段1', '维度字段2']).size().reset_index(name='记录数1')# 读取第二个Excel文件
df2 = pd.read_excel('file2.xlsx', sheet_name='Sheet1')
# 分组统计记录数(维度字段名需替换为实际字段名)
df2_group = df2.groupby(['维度字段1', '维度字段2']).size().reset_index(name='记录数2')# 全外连接合并
merged_df = pd.merge(df1_group,df2_group,on=['维度字段1', '维度字段2'],how='outer'
).fillna(0)# 计算差值列
merged_df['记录数差值'] = merged_df['记录数1'] - merged_df['记录数2']# 计算百分比列(处理除以0的情况)
merged_df['差值百分比'] = np.where(merged_df['记录数1'] != 0,(merged_df['记录数差值'] / merged_df['记录数1']) * 100,0  # 当记录数1为0时显示0%
)# 转换数值列为整数类型
merged_df[['记录数1', '记录数2']] = merged_df[['记录数1', '记录数2']].astype(int)# 显示结果
print("合并结果:")
print(merged_df)# 可选:保存结果到新Excel
merged_df.to_excel('comparison_result.xlsx', index=False)

使用说明:

  1. 将代码中的’file1.xlsx’和’file2.xlsx’替换为实际文件名
  2. 将’维度字段1’和’维度字段2’替换为实际的维度字段名称
  3. 将sheet_name参数替换为实际的sheet名称
  4. 数值列会自动处理NaN值并转换为整数类型
  5. 结果包含以下列:
    • 维度字段1
    • 维度字段2
    • 记录数1(来自第一个文件)
    • 记录数2(来自第二个文件)
    • 记录数差值(记录数1 - 记录数2)
    • 差值百分比(差值/记录数1)

注意事项:

  1. 确保两个文件的维度字段名称完全一致
  2. 最终结果会自动处理缺失值(用0填充)
  3. 百分比计算已处理除零情况(当记录数1为0时显示0%)
  4. 结果数据会自动保存到comparison_result.xlsx文件(可选)

示例输出:

维度字段1  维度字段2  记录数1  记录数2  记录数差值  差值百分比
A        X        10      8        2      20.0
B        Y        20     25       -5     -25.0
C        Z         5      0        5     100.0
D        W         0      3       -3       0.0

相关文章:

  • 封装一个搜索区域 SearchForm.vue组件
  • 【项目】构建高性能多线程内存池:简化版 tcmalloc 实现指南
  • scoped+组件通信+props校验+记事本组件
  • 企业微信PC端 开启调试模式
  • 关于我的服务器
  • Python + 淘宝 API 开发实战:自动化采集商品详情与 SKU 数据清洗指南
  • Qt项目——串口调试助手
  • vite【详解】常用配置 vite.config.js / vite.config.ts
  • 数据库案例2--事务、视图和索引
  • Flowable进阶-网关、事件和服务
  • cout和printf的区别
  • 量子噪声模拟器是验证量子算法的鲁棒性
  • LVGL Animation Image(Animimg)控件详解
  • [特殊字符] 第 2 篇:快速上手 Framer Motion(实操入门)
  • vue学习笔记06
  • NLM格式与温哥华格式的区别与联系是什么?
  • 基于STM32、HAL库的TCA8418RTWR I/O扩展器驱动程序设计
  • 【3D文件】3D打印迪迦奥特曼,3D打印的迪迦圣像,M78遗迹管理局,5款不同的3D打印迪迦免费下载,总有一款适合你
  • vue + element-plus自定义表单验证(修改密码业务)
  • MySQL安装实战:从零开始搭建你的数据库环境
  • 呈现“民族脊梁型爱国学府”曲折辉煌的办学历程,这个展览开幕
  • 广州一男子早高峰爬上猎德大桥顶部疑似要跳桥,路段一度拥堵
  • 上海优化餐企发展环境:装修拓展门店最高奖50万,建立问题协调机制
  • “代课老师被男友杀害案”一审开庭,将择期宣判
  • 俄方因复活节停止战斗行动,外交部:乐见一切通往停火的努力
  • 大悦城:去年净亏损29.77亿元,三年累计亏损超70亿元