如何在Pandas DataFrame中计算标准差?分析挪威新车销量车型波动
解决方法:找出挪威新车销量中波动最大的车型
我来帮你一步步实现这个需求,同时详细说明Pandas里计算标准差的具体方法,让整个流程更清晰准确。
步骤1:数据读取与预处理
你的初始数据读取逻辑是对的,但需要补充数值类型转换(否则销量字段会是字符串格式,无法进行统计计算),具体代码如下:
import pandas as pd import numpy as np # 读取数据集:原始文件第一行是表头,所以用header=None读取后需要手动丢弃 data = pd.read_csv("norway_new_car_sales_by_model.csv", header=None, encoding="latin-1") # 为数据设置清晰的列名 data.columns = ['Year','Month','Make','Model','Quantity','Pct'] # 移除原始的表头行(也就是当前数据的第一行) data.drop(data.head(1).index, inplace=True) # 关键操作:将销量字段转换为数值类型,确保后续计算有效 data['Quantity'] = pd.to_numeric(data['Quantity'])
步骤2:计算各车型的年度总销量
我们需要按「品牌+车型+年份」分组,统计每个车型每年的总销量:
# 分组计算单车型年度总销量,并重置索引为常规格式 annual_sales = data.groupby(['Make', 'Model', 'Year'])['Quantity'].sum().reset_index()
步骤3:计算每个车型年度销量的标准差
在Pandas中,std()方法可以直接对分组后的数值序列计算标准差。这里我们按「品牌+车型」分组,计算每组年度销量的波动程度:
# 按车型分组,计算年度销量的标准差 model_std = annual_sales.groupby(['Make', 'Model'])['Quantity'].std().reset_index() # 重命名列名,让结果更易读 model_std.rename(columns={'Quantity': 'Annual_Sales_Std'}, inplace=True)
小提示:
std()默认计算的是样本标准差(除以n-1),如果需要计算总体标准差,可以添加参数ddof=0,即std(ddof=0)。
步骤4:找出波动最大的车型
最后对标准差列降序排序,取第一行就是我们要找的销量波动最大的车型:
# 按标准差从大到小排序,提取波动最大的车型 most_volatile_model = model_std.sort_values(by='Annual_Sales_Std', ascending=False).head(1) print("历年销量波动最大的车型:") print(most_volatile_model)
补充:Pandas计算标准差的常用场景
- 对单个列/整个DataFrame计算标准差:
df['column_name'].std()或df.std() - 分组后计算每组标准差:如上述案例的
groupby().std(),可以灵活组合多个分组键 - 切换标准差类型:通过
ddof参数控制,ddof=1为样本标准差(默认),ddof=0为总体标准差
内容的提问来源于stack exchange,提问作者yssefunc
相关产品推荐
相关产品推荐

