Python Pandas:按Top3畅销车型计算厂商总销量最大值问题
解决大规模数据集下厂商Top3车型总销量对比问题
嘿,刚上手Python、Pandas和NumPy的话,这个问题用Pandas的内置方法就能高效解决,完全适配大规模数据集,不用写复杂循环~下面一步步来拆解:
核心思路
- 按汽车厂商分组,每组内筛选出销量Top3的车型
- 对每个厂商的Top3车型销量求和
- 找出总销量最高的厂商
完整代码示例
首先导入Pandas(处理结构化数据集它比NumPy更顺手):
import pandas as pd
假设你的数据集已经加载成DataFrame df,先把示例数据模拟出来:
data = { 'CarManufacturer': ['Volkswagen', 'Volkswagen', 'Honda', 'Honda'], 'Car': ['Polo', 'Golf', 'Jazz', 'Civic'], 'TotalCarSales': [100, 50, 40, 100] } df = pd.DataFrame(data)
接下来执行核心操作:
# 1. 按厂商分组,取出每组销量Top3的车型(不足3个则取全部现有车型) top3_per_manufacturer = df.groupby('CarManufacturer').apply( lambda group: group.nlargest(3, 'TotalCarSales') ).reset_index(drop=True) # 2. 计算每个厂商Top3车型的总销量 manufacturer_total = top3_per_manufacturer.groupby('CarManufacturer')['TotalCarSales'].sum() # 3. 找出总销量最高的厂商及其销量 top_manufacturer = manufacturer_total.idxmax() top_total_sales = manufacturer_total.max() print(f"总销量最高的厂商是:{top_manufacturer},Top3车型总销量为:{top_total_sales}")
代码细节解释
groupby('CarManufacturer'):把数据集按厂商拆分成独立子集合,方便单独处理每个厂商的车型数据nlargest(3, 'TotalCarSales'):这是Pandas专门优化过的取前N大值方法,比先排序再取head(3)性能好很多,尤其适合百万级以上的大规模数据groupby(...).sum():对每个厂商的Top3车型销量求和,得到该厂商的核心销量贡献idxmax()/max():快速定位总销量最高的厂商名称和对应的销量数值
大规模数据集优化提示
如果你的数据量特别大(比如千万级行),可以去掉apply改用更高效的分组排序+筛选逻辑:
# 更高效的写法,避免apply的额外开销 df['rank'] = df.groupby('CarManufacturer')['TotalCarSales'].rank(ascending=False, method='first') top3_per_manufacturer = df[df['rank'] <= 3].drop('rank', axis=1)
这个方法利用Pandas的向量化运算,性能会比apply更优。
内容的提问来源于stack exchange,提问作者Wanda Stransky
相关产品推荐
相关产品推荐

