计算熊猫数据帧值的标准偏差

时间:2021-03-17 08:22:55

标签: python pandas statistics

我目前正在研究机器学习模型,并且正在进行特征工程。我使用的数据集显示了 13 家商店中 70 多种商品的产品销售数量。

我创建了一些功能,例如根据商品的 SKU-ID(它是什么产品)计算商品的平均价格。我现在想制作每个 SKU 价格的标准偏差的特征。

以下是我用于生成所有商店特定产品平均价格的函数以及用于确定所有商店产品价格标准差的函数:

 def gen_average_price(train,test,col,price='base_price',name='name'):
    temp=train.groupby(col)[price].mean().reset_index().rename(columns={price:name})
    train=pd.merge(train,temp,how='left',on=col)
    test=pd.merge(test,temp,how='left',on=col)
    train[name].fillna(np.median(temp[name]),inplace=True)
    test[name].fillna(np.median(temp[name]),inplace=True)
    return train,test

 def gen_std_price(train,test,col,price='base_price',name='name'):
    temp=train.groupby(col)[price].mean().reset_index().rename(columns={price:name})
    train=pd.merge(train,temp,how='left',on=col)
    test=pd.merge(test,temp,how='left',on=col)
    s = np.median(temp[name])
    train[name].fillna(statistics.stdev(s), inplace = True)
    test[name].fillna(statistics.stdev(s), inplace = True)
    return train,test
    

这是我用来获取特定产品平均价格的函数以及获取产品价格标准差的函数。上面的平均价格函数 (gen_average_price) 按预期工作,但是当我尝试使用我的标准偏差函数来获取产品价格的标准偏差时,我遇到了以下错误:

#Generating std dev of prices per sku-id
train,test = gen_std_price(train,test,col=['sku_id'],price='base_price',name='price_sku_id_stdev') 

TypeError: 'numpy.float64' object is not iterable

谁能帮助我了解为什么会出现这种情况和/或如何解决?

以下是有关所用数据集的更多信息:

train.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 150150 entries, 0 to 150149
Data columns (total 16 columns):
 #   Column              Non-Null Count   Dtype  
---  ------              --------------   -----  
 0   record_ID           150150 non-null  int64  
 1   week                150150 non-null  object 
 2   store_id            150150 non-null  int64  
 3   sku_id              150150 non-null  int64  
 4   total_price         150150 non-null  float64
 5   base_price          150150 non-null  float64
 6   is_featured_sku     150150 non-null  int64  
 7   is_display_sku      150150 non-null  int64  
 8   units_sold          150150 non-null  int64  
 9   count_id_sku_store  150150 non-null  float64
 10  count_id_sku        150150 non-null  float64
 11  count_id_store      150150 non-null  float64
 12  price_sku_store     150150 non-null  float64
 13  price_to_sku_store  150150 non-null  float64
 14  price_store_id      150150 non-null  float64
 15  price_sku_id        150150 non-null  float64
dtypes: float64(9), int64(6), object(1)
memory usage: 19.5+ MB

test.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 13860 entries, 0 to 13859
Data columns (total 15 columns):
 #   Column              Non-Null Count  Dtype  
---  ------              --------------  -----  
 0   record_ID           13860 non-null  int64  
 1   week                13860 non-null  object 
 2   store_id            13860 non-null  int64  
 3   sku_id              13860 non-null  int64  
 4   total_price         13860 non-null  float64
 5   base_price          13860 non-null  float64
 6   is_featured_sku     13860 non-null  int64  
 7   is_display_sku      13860 non-null  int64  
 8   count_id_sku_store  13860 non-null  float64
 9   count_id_sku        13860 non-null  float64
 10  count_id_store      13860 non-null  float64
 11  price_sku_store     13860 non-null  float64
 12  price_to_sku_store  13860 non-null  float64
 13  price_store_id      13860 non-null  float64
 14  price_sku_id        13860 non-null  float64
dtypes: float64(9), int64(5), object(1)
memory usage: 1.7+ MB

1 个答案:

答案 0 :(得分:0)

另一种方法,您可以使用 train.describe() 来完整描述您的数据集。它将返回计数、平均值、标准差、中位数、第一四分位数、第三四分位数和最大值。

示例

df = pd.DataFrame({"a":range(0,10),"b":range(10,20)})
df.describe()

enter image description here