Python 如何计算数据帧中的标准偏差?
我正在使用您找到的norway_new_car_sales_by_model.csv数据集。我想找到多年来销售波动最大的车型。我使用的是每种车型年总销售额的标准差。 预期产出为: 我的问题是 1) 我没有处理nan值。。。即使我尝试了很多代码 2) 如何从索引栏中获取奥迪A4奥迪我认为需要: 首先从Python 如何计算数据帧中的标准偏差?,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用您找到的norway_new_car_sales_by_model.csv数据集。我想找到多年来销售波动最大的车型。我使用的是每种车型年总销售额的标准差。 预期产出为: 我的问题是 1) 我没有处理nan值。。。即使我尝试了很多代码 2) 如何从索引栏中获取奥迪A4奥迪我认为需要: 首先从read_csv中删除参数header=None,因为csv中的第一个是列名称: data=pd.read_csv("norway_new_car_sales_by_model.csv",enco
read_csv
中删除参数header=None
,因为csv中的第一个是列名称:
data=pd.read_csv("norway_new_car_sales_by_model.csv",encoding="latin-1")
print (data.head())
Year Month Make Model Quantity Pct
0 2007 1 Volkswagen Volkswagen Passat 1267 10.0
1 2007 1 Toyota Toyota Rav4 819 6.5
2 2007 1 Toyota Toyota Avensis 787 6.2
3 2007 1 Volkswagen Volkswagen Golf 720 5.7
4 2007 1 Toyota Toyota Corolla 691 5.4
使用np.std
应用pivot\u table
函数:
maketotal_1=data.pivot_table(values='Quantity',index=['Month','Model','Make'],aggfunc=np.std)
print (maketotal_1.head())
Quantity
Month Model Make
1 Audi A3 Audi 50.986109
Audi A4 Audi 60.549704
Audi A6 Audi NaN
Audi Q3 Audi NaN
BMW 2-serie BMW NaN
Last first通过删除NaN
s,并用于将多索引
转换为列,并创建唯一的默认索引:
df1 = maketotal_1.dropna().reset_index()
按进行最后一次分组使
按获取最大值的索引,然后按loc
选择行:
df3 = df1.loc[df1.groupby('Make')['Quantity'].idxmax()]
print (df3)
Month Model Make Quantity
447 12 Audi A3 Audi 119.867427
415 11 BMW i3 BMW 460.936366
56 2 Ford Mondeo Ford 169.889880
235 6 Honda CR-V Honda 171.579671
457 12 Hyundai ix35 Hyundai 32.526912
348 9 Kia Sportage Kia 55.154329
60 2 Mazda CX-5 Mazda 144.030957
14 1 Mercedes-Benz GLC Mercedes-Benz 119.501046
160 4 Mitsubishi ASX Mitsubishi 312.541197
391 10 Nissan Leaf Nissan 225.322584
114 3 Opel Astra Opel 85.182158
22 1 Peugeot 207 Peugeot 97.962578
168 4 Renault Zoe Renault 53.740115
395 10 Skoda Octavia Skoda 121.668767
122 3 Suzuki Vitara Suzuki 85.559921
123 3 Tesla Model S Tesla 510.400823
33 1 Toyota Corolla Toyota 326.683333
179 4 Volkswagen Golf Volkswagen 454.872681
485 12 Volvo V40 Volvo 183.919366
编辑:
没有雪铁龙
,因为np.std
returnNaN
:
print (maketotal_1[maketotal_1.index.get_level_values('Make') == 'Citroen '])
Quantity
Month Model Make
11 Citroen C4 Aircross Citroen NaN
你们能将数据样本添加到问题中吗?你们能将数据粘贴为文本而不是图像吗?图像无法复制到解释器中。非常感谢您的详细解释。。。我现在明白了。但是,有一件事我注意到了,数据集中有雪铁龙C4 Aircross。。。当你写这段代码时。。maketotal=df.pivot_表(值='Quantity',索引=['Make','Model'],aggfunc='mean')。。。当我接受std.dev时,它被认为是nan值。因为预期的输出有雪铁龙C4。@Bugs_Bunny-我也注意到了。我认为原因是std的所有值都是
NaN
s.@Bugs\u Bunny-但我注意到另一个问题。(我不是财务方面的人,所以不确定是否理解正确)所以你需要每年一次。这意味着每年每个月需要std
?若是,则解决方案是正确的。为了计算波动,取每个型号的年总销售额的标准偏差。您的解决方案是正确的。@Bugs\u Bunny-谢谢您的解释。顺便说一句,您也可以向上投票-单击接受标记上方的0
小三角形。谢谢
print (maketotal_1[maketotal_1.index.get_level_values('Make') == 'Citroen '])
Quantity
Month Model Make
11 Citroen C4 Aircross Citroen NaN