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)
使用说明:
需要根据实际数据修改以下参数:
- 文件路径(
first_file
和second_file
) - Sheet名称(
first_sheet
和second_sheet
) - 维度字段名称(
first_dims
和second_dims
需保持相同) - 度量字段名称(
first_measure
和second_measure
)
- 文件路径(
功能特点:
- 自动处理分组聚合
- 支持全外连接保留所有数据
- 自动处理空值(转换为0)
- 包含异常值处理(除零保护)
- 结果输出格式美化
注意事项:
- 确保两个文件的维度字段名称完全一致
- 度量字段建议使用不同的名称以示区分
- 最终结果包含以下列:
- 所有维度字段
- 第一个度量值(分组合计)
- 第二个度量值
- 差异值(第一个度量 - 第二个度量)
- 百分比(差异值/第一个度量)
示例输出:
维度字段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%