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

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

python 复制代码
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
相关推荐
Java知识库9 分钟前
「深度拆解」Spring Boot如何用DeepSeek重构MCP通信层?从线程模型到分布式推理的架构进化
java·开发语言·spring boot·程序员·编程
Bruce_Liuxiaowei13 分钟前
PHP文件读取漏洞全面剖析:触发点与利用技术
开发语言·php
摸鱼码14 分钟前
(头歌作业)-6.5 幻方(project)
开发语言·python
oioihoii26 分钟前
C++11 尾随返回类型:从入门到精通
java·开发语言·c++
Wyn_35 分钟前
【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
开发语言·qt
MYH51642 分钟前
汽车停车匹配充电桩随机森林
python·随机森林·汽车
伍六星43 分钟前
更新Java的环境变量后VScode/cursor里面还是之前的环境变量
java·开发语言·vscode
Dola_Pan1 小时前
Android四大组件通讯指南:Kotlin版组件茶话会
android·开发语言·kotlin
鼓掌MVP1 小时前
Python多线程编程:从GIL锁到实战优化
python
天天爱吃肉82181 小时前
【十年技术演进深度解构:车载充电机(OBC)将成为新能源汽车的“能源大脑”】
python·嵌入式硬件·算法·汽车·能源