本文目录导读:

我来详细介绍使用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数据聚合的主要场景,从基础用法到高级技巧,根据实际需求选择合适的聚合方法可以提高数据分析效率。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播