编写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)
使用说明:
- 将代码中的'file1.xlsx'和'file2.xlsx'替换为实际文件名
- 将'维度字段1'和'维度字段2'替换为实际的维度字段名称
- 将sheet_name参数替换为实际的sheet名称
- 数值列会自动处理NaN值并转换为整数类型
- 结果包含以下列:
- 维度字段1
- 维度字段2
- 记录数1(来自第一个文件)
- 记录数2(来自第二个文件)
- 记录数差值(记录数1 - 记录数2)
- 差值百分比(差值/记录数1)
注意事项:
- 确保两个文件的维度字段名称完全一致
- 最终结果会自动处理缺失值(用0填充)
- 百分比计算已处理除零情况(当记录数1为0时显示0%)
- 结果数据会自动保存到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