题目
计算产品销售额并找出最高销售额产品
信息
- 类型:问答
- 难度:⭐
考点
DataFrame创建,列运算,分组聚合,最大值索引
快速回答
解决方案分为四步:
- 创建包含产品、数量和单价的DataFrame
- 添加销售额列(数量×单价)
- 按产品分组计算总销售额
- 使用
idxmax()找出最高销售额产品
核心代码:
df['sales'] = df['quantity'] * df['price']
total_sales = df.groupby('product')['sales'].sum()
top_product = total_sales.idxmax()
## 解析
问题场景
给定产品销售数据,包含产品名称、销售数量和单价,需要计算每个产品的总销售额并找出销售额最高的产品。这是数据分析中的常见任务,涉及基础数据处理技术。
完整解决方案
import pandas as pd
# 1. 创建DataFrame
data = {
'product': ['A', 'B', 'A', 'C', 'B', 'C'],
'quantity': [10, 5, 8, 12, 6, 15],
'price': [20, 30, 20, 15, 30, 15]
}
df = pd.DataFrame(data)
# 2. 计算销售额列
df['sales'] = df['quantity'] * df['price']
# 3. 分组计算总销售额
total_sales = df.groupby('product')['sales'].sum()
# 4. 找出最高销售额产品
top_product = total_sales.idxmax()
print(f"销售额最高的产品是: {top_product}")原理说明
- 列运算:Pandas支持向量化运算,
df['quantity'] * df['price']会逐元素计算,效率远高于循环 - 分组聚合:
groupby('product')按产品分组,sum()对每组销售额求和 - idxmax():返回Series中最大值对应的索引(此处即产品名称)
最佳实践
- 优先使用向量化运算而非循环,提升性能
- 分组后重置索引更清晰:
total_sales.reset_index(name='total_sales') - 结果排序:
total_sales.sort_values(ascending=False)
常见错误
- 忘记分组:直接对原始DataFrame求最大值会得到单笔最高销售额而非产品总和
- 错误使用索引:混淆
idxmax()(返回索引)和max()(返回值) - 数据类型错误:确保数量和单价为数值类型(
df.astype({'quantity':'int', 'price':'float'}))
扩展知识
- 多级分组:
groupby(['category','product'])实现多维分析 - 聚合函数组合:
.agg(['sum','mean','count'])一次性计算多个指标 - 时间序列分析:结合
resample()可按时间维度分组(如月度销售额) - 性能优化:大数据集使用
Dask替代Pandas实现分布式计算