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_filesecond_file
    • Sheet名称(first_sheetsecond_sheet
    • 维度字段名称(first_dimssecond_dims需保持相同)
    • 度量字段名称(first_measuresecond_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%
相关推荐
SelectDB16 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码1 天前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵1 天前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li2 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸2 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学2 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田2 天前
Pydantic校验配置文件
python
hboot2 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi3 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi3 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab