本文目录导读:

我来用具体案例说明Pandas数据分组降维的几种常用方法:
案例1:基础分组聚合(最常用)
import pandas as pd
import numpy as np
# 创建示例数据
df = pd.DataFrame({
'部门': ['销售', '技术', '销售', '技术', '销售', '技术', '销售', '技术'],
'性别': ['男', '男', '女', '女', '男', '男', '女', '女'],
'年龄': [25, 28, 30, 35, 22, 27, 33, 29],
'薪资': [8000, 12000, 9000, 15000, 7500, 11000, 8500, 13000],
'绩效': [85, 90, 88, 92, 78, 85, 90, 88]
})
# 1. 单维度分组聚合 - 按部门分组求平均
dept_stats = df.groupby('部门').agg({
'薪资': 'mean',
'年龄': 'mean',
'绩效': ['mean', 'max', 'min']
}).round(2)
print("各部门统计:")
print(dept_stats)
案例2:多维度分组降维
# 2. 多维度分组
multi_stats = df.groupby(['部门', '性别']).agg({
'薪资': ['mean', 'count'],
'绩效': 'mean'
}).round(2)
print("\n多维分组统计:")
print(multi_stats)
# 3. 使用reset_index()降维
flat_stats = df.groupby(['部门', '性别']).agg(
avg_salary=('薪资', 'mean'),
count=('薪资', 'count'),
avg_performance=('绩效', 'mean')
).reset_index()
print("\n降维后的数据:")
print(flat_stats)
案例3:实际业务场景
# 创建销售数据
sales_data = pd.DataFrame({
'日期': pd.date_range('2024-01-01', periods=100, freq='D'),
'区域': np.random.choice(['华东', '华南', '华北', '西部'], 100),
'产品': np.random.choice(['A', 'B', 'C'], 100),
'销售额': np.random.randint(1000, 10000, 100),
'客户数': np.random.randint(10, 100, 100),
'利润率': np.random.uniform(0.1, 0.3, 100)
})
# 按月、区域、产品分组统计
sales_data['月份'] = sales_data['日期'].dt.month
sales_data['季度'] = sales_data['日期'].dt.quarter
# 高级分组降维
summary = sales_data.groupby(['区域', '产品', '季度']).agg({
'销售额': ['sum', 'mean', 'count'],
'客户数': 'sum',
'利润率': 'mean'
}).round(2)
# 重命名列
summary.columns = ['总销售额', '平均销售额', '交易次数', '总客户数', '平均利润率']
summary = summary.reset_index()
print("销售汇总数据:")
print(summary.head(10))
案例4:分组后的变换与透视
# 4. 使用pivot_table实现分组降维
pivot_df = pd.pivot_table(
sales_data,
values=['销售额', '客户数'],
index=['区域', '产品'],
columns=['季度'],
aggfunc={'销售额': 'sum', '客户数': 'sum'},
fill_value=0
)
print("\n透视表结果:")
print(pivot_df)
# 5. 使用transform保持原维度
sales_data['区域平均销售'] = sales_data.groupby('区域')['销售额'].transform('mean')
sales_data['区域销售排名'] = sales_data.groupby('区域')['销售额'].transform('rank', ascending=False)
print("\n保留原维度的统计:")
print(sales_data[['区域', '销售额', '区域平均销售', '区域销售排名']].head(10))
案例5:复杂分组降维操作
# 创建更复杂的数据
complex_data = pd.DataFrame({
'用户': ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
'月份': [1, 2, 1, 2, 1, 2, 1, 2],
'购买金额': [100, 200, 150, 180, 300, 250, 400, 350],
'购买次数': [2, 3, 2, 2, 3, 4, 5, 6]
})
# 高级聚合函数
def range_func(x):
return x.max() - x.min()
def growth_rate(x):
return (x.iloc[-1] - x.iloc[0]) / x.iloc[0] if len(x) > 1 else 0
user_behavior = complex_data.groupby('用户').agg({
'购买金额': ['sum', 'mean', range_func, growth_rate],
'购买次数': ['sum', 'mean', 'max']
}).round(2)
# 扁平化列索引
user_behavior.columns = ['_'.join(col).strip() for col in user_behavior.columns.values]
user_behavior = user_behavior.reset_index()
print("用户行为分析:")
print(user_behavior)
实用技巧
# 1. 使用named aggregation (推荐)
clean_result = sales_data.groupby(['区域', '产品']).agg(
总销售额=('销售额', 'sum'),
平均销售额=('销售额', 'mean'),
总客户数=('客户数', 'sum'),
平均利润率=('利润率', 'mean'),
交易次数=('销售额', 'count')
).round(2).reset_index()
print("\n清晰的分组结果:")
print(clean_result.head(10))
# 2. 分组后排序
top_regions = clean_result.sort_values('总销售额', ascending=False).head(5)
print("\n销售额Top5:")
print(top_regions)
# 3. 数据导出
# clean_result.to_excel('分组统计结果.xlsx', index=False)
核心要点:
groupby()是分组降维的核心函数agg()指定聚合方式,可以是多个函数reset_index()将分组索引转为普通列pivot_table()实现数据透视transform()保持原数据维度添加统计值
这些方法能帮你有效处理数据的分类汇总和降维分析。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播