Python Pandas实现导出两个Excel数据集的对应值的差异值分析

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

实现您需求的Python Pandas代码:

python 复制代码
import pandas as pd

# 第一个Excel处理
def process_first_excel(file_path, sheet_name, dim_cols, measure_col):
    df = pd.read_excel(file_path, sheet_name=sheet_name, usecols=dim_cols + [measure_col])
    grouped = df.groupby(dim_cols)[measure_col].sum().reset_index()
    return grouped

# 第二个Excel处理
def process_second_excel(file_path, sheet_name, dim_cols, measure_col):
    df = pd.read_excel(file_path, sheet_name=sheet_name, usecols=dim_cols + [measure_col])
    return df

# 执行处理流程
# 参数配置(根据实际情况修改)
first_file = "file1.xlsx"
first_sheet = "Sheet1"
first_dims = ["维度字段1", "维度字段2"]
first_measure = "度量字段1"

second_file = "file2.xlsx"
second_sheet = "Sheet1"
second_dims = ["维度字段1", "维度字段2"]  # 确保维度字段名称与第一个文件一致
second_measure = "度量字段2"

# 处理数据
df1 = process_first_excel(first_file, first_sheet, first_dims, first_measure)
df2 = process_second_excel(second_file, second_sheet, second_dims, second_measure)

# 全外连接
merged = pd.merge(
    df1,
    df2,
    on=first_dims,
    how="outer",
    suffixes=("_df1", "_df2")
)

# 计算差异和百分比
# 处理空值(将NaN转为0以便计算)
merged.fillna({first_measure: 0, second_measure: 0}, inplace=True)

# 计算差异
merged["差异值"] = merged[first_measure] - merged[second_measure]

# 计算百分比(避免除以零错误)
merged["百分比"] = merged.apply(
    lambda x: x["差异值"] / x[first_measure] * 100 if x[first_measure] != 0 else 0,
    axis=1
)

# 格式化输出
pd.options.display.float_format = "{:.2f}%".format
print("结果数据表:")
print(merged)

# 可选:保存结果到新Excel
merged.to_excel("comparison_result.xlsx", index=False)

使用说明:

  1. 需要根据实际数据修改以下参数:

    • 文件路径(first_file和second_file)
    • Sheet名称(first_sheet和second_sheet)
    • 维度字段名称(first_dims和second_dims需保持相同)
    • 度量字段名称(first_measure和second_measure)
  2. 功能特点:

    • 自动处理分组聚合
    • 支持全外连接保留所有数据
    • 自动处理空值(转换为0)
    • 包含异常值处理(除零保护)
    • 结果输出格式美化
  3. 注意事项:

    • 确保两个文件的维度字段名称完全一致
    • 度量字段建议使用不同的名称以示区分
    • 最终结果包含以下列:
      • 所有维度字段
      • 第一个度量值(分组合计)
      • 第二个度量值
      • 差异值(第一个度量 - 第二个度量)
      • 百分比(差异值/第一个度量)

示例输出:

复制代码
维度字段1 维度字段2  度量字段1  度量字段2  差异值    百分比
A       X     150.00   120.00   30.00   20.00%
B       Y     200.00     0.00  200.00  100.00%
C       Z       0.00    80.00  -80.00    0.00%
相关推荐
iReachers2 分钟前
Termux:把安卓手机变成随身的命令行工具箱
python·安卓·termux·命令行·实用工具
xy_zoe4 分钟前
揭秘市面上那些热门的SEO优化服务机构!
python·facebook
高级程序源6 分钟前
hive电商平台商品销售数据分析与趋势预测45659-计算机课程设计、毕业设计
vue.js·hive·spring boot·mysql·数据分析·django·课程设计
Python图像识别8 分钟前
43-【2027毕设】YOLO11暴力检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
卷无止境11 分钟前
如何让AI Agent老老实实遵守公司代码规范——以Pi Agent为例
后端·python
计算机编程指导师14 分钟前
计算机毕设怎么做?基于Hadoop+Spark的商场商铺数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·商场商铺
2601_9603563815 分钟前
2027校招准备:应用统计学投零售运营管培生,如何把数据分析转化为业务能力
数据挖掘·数据分析·零售
李福春16 分钟前
斗破Google ADK Java苍穹-第7境斗皇-御天地-Harness治理
java·人工智能·python·深圳同盟·腾讯云架构师技术同盟·adk java·harness 治理
Wang's Blog17 分钟前
Java 项目部署之 Docker工具快速入门: 容器命令练习:创建、改文件、重启到删除的完整闭环
java·开发语言·docker
quantdash_cc21 分钟前
实时行情出现短暂异常时应该怎么处理?从数据校验到故障定位
开发语言·python·数据分析·量化交易·股票数据·quantdash