Python Pandas实现导出两个Excel数据集的分组记录数分析

发布于:2025-04-16 ⋅ 阅读:(47) ⋅ 点赞:(0)

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

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)

使用说明:

  1. 将代码中的’file1.xlsx’和’file2.xlsx’替换为实际文件名
  2. 将’维度字段1’和’维度字段2’替换为实际的维度字段名称
  3. 将sheet_name参数替换为实际的sheet名称
  4. 数值列会自动处理NaN值并转换为整数类型
  5. 结果包含以下列:
    • 维度字段1
    • 维度字段2
    • 记录数1(来自第一个文件)
    • 记录数2(来自第二个文件)
    • 记录数差值(记录数1 - 记录数2)
    • 差值百分比(差值/记录数1)

注意事项:

  1. 确保两个文件的维度字段名称完全一致
  2. 最终结果会自动处理缺失值(用0填充)
  3. 百分比计算已处理除零情况(当记录数1为0时显示0%)
  4. 结果数据会自动保存到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