Python 如何计算数据帧中的标准偏差?

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

我正在使用您找到的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",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
return
NaN

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