本文目录导读:

我来详细介绍使用Pandas进行数据分组重命名的几种常见方法。
基本分组重命名
1 使用 groupby() + agg() + rename()
import pandas as pd
import numpy as np
# 创建示例数据
df = pd.DataFrame({
'部门': ['技术部', '市场部', '技术部', '市场部', '财务部', '财务部'],
'员工': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],
'薪资': [10000, 8000, 12000, 9000, 11000, 9500]
})
print("原始数据:")
print(df)
# 按部门分组,计算平均薪资,并重命名结果列
result = df.groupby('部门')['薪资'].agg(['mean', 'sum', 'count']).rename(
columns={
'mean': '平均薪资',
'sum': '薪资总额',
'count': '人数'
}
)
print("\n分组统计结果:")
print(result)
2 使用 agg() 直接重命名
# 方法1:使用字典直接指定新列名
result2 = df.groupby('部门').agg(
平均薪资=('薪资', 'mean'),
薪资总额=('薪资', 'sum'),
人数=('薪资', 'count')
)
print("\n使用agg直接重命名:")
print(result2)
多列分组重命名
# 创建包含多列的数据
df2 = pd.DataFrame({
'部门': ['技术部', '市场部', '技术部', '市场部', '技术部'],
'年份': [2023, 2023, 2024, 2024, 2024],
'销售额': [100, 200, 150, 180, 120],
'利润': [20, 30, 25, 28, 22]
})
print("\n多列数据:")
print(df2)
# 多列分组,对不同列进行不同聚合
result3 = df2.groupby(['部门', '年份']).agg(
总销售额=('销售额', 'sum'),
平均利润=('利润', 'mean'),
最高销售额=('销售额', 'max')
).reset_index()
print("\n多列分组重命名结果:")
print(result3)
使用 pivot_table 进行分组重命名
# 使用数据透视表
result4 = pd.pivot_table(
df2,
values=['销售额', '利润'],
index=['部门'],
columns=['年份'],
aggfunc={
'销售额': 'sum',
'利润': 'mean'
}
)
# 重命名多层索引
result4.columns = [f'{col[0]}_{col[1]}' for col in result4.columns]
print("\n数据透视表重命名:")
print(result4)
复杂分组重命名案例
# 创建更复杂的示例数据
df3 = pd.DataFrame({
'产品类别': ['电子产品', '食品', '电子产品', '食品', '服装', '服装'],
'产品名称': ['手机', '面包', '电脑', '饼干', 'T恤', '牛仔裤'],
'销售量': [500, 1000, 300, 800, 600, 400],
'单价': [5000, 15, 8000, 10, 100, 200],
'月份': [1, 1, 2, 2, 1, 2]
})
# 计算销售额
df3['销售额'] = df3['销售量'] * df3['单价']
# 复杂分组统计
result5 = df3.groupby(['产品类别', '月份']).agg(
总销售量=('销售量', 'sum'),
平均单价=('单价', 'mean'),
总销售额=('销售额', 'sum'),
产品数量=('产品名称', 'nunique')
).rename(
columns={
'总销售量': '销售总数',
'平均单价': '平均售价'
}
).reset_index()
print("\n复杂分组统计结果:")
print(result5)
使用 NamedAgg 进行重命名
from pandas import NamedAgg
# 使用 NamedAgg 更清晰地指定聚合函数
result6 = df3.groupby('产品类别').agg(
总销售额=NamedAgg(column='销售额', aggfunc='sum'),
平均销售量=NamedAgg(column='销售量', aggfunc='mean'),
最大单价=NamedAgg(column='单价', aggfunc='max'),
最小单价=NamedAgg(column='单价', aggfunc='min')
).round(2)
print("\n使用NamedAgg重命名:")
print(result6)
实用案例:销售数据分析
# 模拟销售数据
sales_data = pd.DataFrame({
'日期': pd.date_range('2024-01-01', periods=30, freq='D'),
'区域': ['华东', '华南', '华北'] * 10,
'产品': ['A', 'B', 'C'] * 10,
'销售额': np.random.randint(1000, 5000, 30),
'数量': np.random.randint(10, 100, 30)
})
print("\n销售数据示例:")
print(sales_data.head())
# 按区域和产品分组统计
monthly_report = sales_data.groupby(['区域', '产品']).agg(
总销售额=('销售额', 'sum'),
平均日销售额=('销售额', 'mean'),
总销量=('数量', 'sum'),
平均单价=('销售额', lambda x: x.sum() / sales_data.loc[x.index, '数量'].sum())
).round(2)
print("\n月度销售报告:")
print(monthly_report)
链式操作重命名
# 使用链式操作
result7 = (df3.groupby('产品类别')
.agg(
总销售=('销售额', 'sum'),
平均单价=('单价', 'mean'),
产品数=('产品名称', 'count')
)
.rename(columns={'总销售': '总营收', '平均单价': '均价'})
.reset_index()
)
print("\n链式操作结果:")
print(result7)
-
三种主要方法:
rename():分组后修改列名agg():直接指定新列名和聚合函数NamedAgg:结构化定义分组聚合
-
常用技巧:
- 使用
reset_index()将分组索引转为列 - 链式操作提高代码可读性
- 结合
round()处理小数精度
- 使用
-
注意事项:
- 确保列名唯一性
- 正确处理多层索引
- 考虑数据类型转换
这些方法可以根据具体需求灵活组合使用,使数据分析结果更加清晰易读。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播