Python案例如何用Pandas做数据聚合函数

wen python案例 1

本文目录导读:

Python案例如何用Pandas做数据聚合函数

  1. 基础聚合函数
  2. 使用 groupby() 进行分组聚合
  3. 使用 agg() 自定义聚合
  4. 实际业务案例
  5. 高级聚合技巧
  6. 性能优化建议

我来详细介绍使用Pandas进行数据聚合的各种方法和实际案例。

基础聚合函数

准备示例数据

import pandas as pd
import numpy as np
# 创建示例数据
data = {
    '部门': ['销售部', '销售部', '技术部', '技术部', '市场部', '市场部', '销售部', '技术部'],
    '区域': ['华北', '华东', '华北', '华东', '华北', '华东', '华北', '华东'],
    '员工': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
    '销售额': [10000, 15000, 20000, 18000, 12000, 16000, 11000, 22000],
    '成本': [6000, 8000, 12000, 10000, 7000, 9000, 6500, 13000],
    '数量': [10, 15, 20, 18, 12, 16, 11, 22]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

使用 groupby() 进行分组聚合

单列分组聚合

# 按部门分组,计算销售额总和
dept_sum = df.groupby('部门')['销售额'].sum()
print("各部门销售额总和:")
print(dept_sum)
# 按部门分组,计算销售额平均值
dept_mean = df.groupby('部门')['销售额'].mean()
print("\n各部门销售额平均值:")
print(dept_mean)
# 多个聚合函数同时使用
dept_stats = df.groupby('部门')['销售额'].agg(['sum', 'mean', 'std', 'min', 'max'])
print("\n各部门销售额统计:")
print(dept_stats)

多列分组聚合

# 按部门和区域分组
grouped = df.groupby(['部门', '区域'])
# 计算各分组销售额总和
sales_by_group = grouped['销售额'].sum()
print("各部门和区域的销售额总和:")
print(sales_by_group)
# 多个列的聚合
multi_agg = grouped[['销售额', '成本', '数量']].sum()
print("\n各部门和区域的汇总:")
print(multi_agg)

使用 agg() 自定义聚合

多个聚合函数

# 对不同列应用不同聚合函数
result = df.groupby('部门').agg({
    '销售额': ['sum', 'mean', 'count'],
    '成本': ['sum', 'mean'],
    '数量': ['sum', 'mean', 'max']
})
print("自定义聚合结果:")
print(result)
# 简化列名
result2 = df.groupby('部门').agg(
    总销售额=('销售额', 'sum'),
    平均销售额=('销售额', 'mean'),
    总成本=('成本', 'sum'),
    总数量=('数量', 'sum')
)
print("\n带列名的聚合结果:")
print(result2)

自定义聚合函数

# 自定义聚合函数
def profit_margin(series):
    """计算利润率"""
    return series.mean() * 0.1
def range_func(series):
    """计算范围"""
    return series.max() - series.min()
# 应用自定义函数
result = df.groupby('部门').agg({
    '销售额': ['sum', 'mean', range_func],
    '利润': ('销售额', lambda x: x.sum() - df.loc[x.index, '成本'].sum())
})
print("自定义函数聚合结果:")
print(result)

实际业务案例

案例1:销售分析报表

# 创建更多真实数据
sales_data = pd.DataFrame({
    '日期': pd.date_range('2024-01-01', periods=100, freq='D'),
    '产品': np.random.choice(['A产品', 'B产品', 'C产品'], 100),
    '区域': np.random.choice(['华北', '华东', '华南', '西南'], 100),
    '销售额': np.random.randint(1000, 50000, 100),
    '数量': np.random.randint(1, 100, 100)
})
# 月度销售统计
sales_data['月份'] = sales_data['日期'].dt.month
monthly_report = sales_data.groupby('月份').agg(
    总销售额=('销售额', 'sum'),
    平均销售额=('销售额', 'mean'),
    总数量=('数量', 'sum'),
    订单数=('数量', 'count'),
    最高单笔=('销售额', 'max')
).round(2)
print("月度销售报表:")
print(monthly_report)
# 产品区域交叉分析
product_region = sales_data.groupby(['产品', '区域']).agg(
    总销售额=('销售额', 'sum'),
    平均销售额=('销售额', 'mean'),
    订单数量=('数量', 'count')
).round(2)
print("\n产品-区域交叉分析:")
print(product_region)

案例2:用户行为分析

# 模拟用户行为数据
user_data = pd.DataFrame({
    '用户ID': np.random.randint(1, 50, 200),
    '访问时间': pd.date_range('2024-01-01', periods=200, freq='H'),
    '页面': np.random.choice(['首页', '产品页', '购物车', '结算页'], 200),
    '停留时长': np.random.randint(10, 600, 200),
    '是否购买': np.random.choice([0, 1], 200, p=[0.7, 0.3])
})
# 用户行为聚合分析
user_analysis = user_data.groupby('用户ID').agg(
    访问次数=('访问时间', 'count'),
    平均停留时长=('停留时长', 'mean'),
    购买次数=('是否购买', 'sum'),
    购买转化率=('是否购买', 'mean')
).round(2)
print("用户行为分析:")
print(user_analysis.head())
# 页面流量分析
page_analysis = user_data.groupby('页面').agg(
    访问量=('访问时间', 'count'),
    平均停留时长=('停留时长', 'mean'),
    购买转化率=('是否购买', 'mean')
).round(2)
print("\n页面流量分析:")
print(page_analysis)

高级聚合技巧

聚合后重置索引

# 默认groupby结果以分组列为索引
result = df.groupby('部门')['销售额'].sum()
print("默认索引:")
print(result)
# 重置索引
result_reset = result.reset_index()
print("\n重置索引后:")
print(result_reset)
# 使用as_index=False参数
result2 = df.groupby('部门', as_index=False)['销售额'].sum()
print("\nas_index=False:")
print(result2)

多重聚合与数据透视

# 使用pivot_table实现类似Excel数据透视表
pivot = pd.pivot_table(
    df,
    values=['销售额', '成本'],
    index='部门',
    columns='区域',
    aggfunc={
        '销售额': ['sum', 'mean'],
        '成本': 'sum'
    },
    fill_value=0
)
print("数据透视表:")
print(pivot)
# 使用crosstab
cross_tab = pd.crosstab(
    df['部门'],
    df['区域'],
    values=df['销售额'],
    aggfunc='sum'
)
print("\n交叉表:")
print(cross_tab)

条件聚合

# 基于条件的聚合
high_sales = df[df['销售额'] > 15000].groupby('部门')['销售额'].agg(['count', 'sum'])
print("高销售额记录统计:")
print(high_sales)
# 使用transform实现保持行数的聚合
df['部门平均销售额'] = df.groupby('部门')['销售额'].transform('mean')
df['销售额排名'] = df.groupby('部门')['销售额'].rank(ascending=False)
print("\n含变换结果的数据:")
print(df)

性能优化建议

# 大数据集时使用优化方法
# 1. 选择必要列
optimized = df[['部门', '销售额']].groupby('部门').sum()
# 2. 使用categorical数据类型
df['部门'] = df['部门'].astype('category')
# 3. 批量操作
result = df.groupby('部门').agg(
    total_sales=('销售额', 'sum'),
    avg_sales=('销售额', 'mean'),
    std_sales=('销售额', 'std')
)

这些案例涵盖了Pandas数据聚合的主要场景,从基础用法到高级技巧,根据实际需求选择合适的聚合方法可以提高数据分析效率。

抱歉,评论功能暂时关闭!