目录

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

目录

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

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

实现您需求的Python Pandas代码:

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%