【问题标题】:Compute standard Deviation of pandas dataframe values计算 pandas 数据帧值的标准偏差
【发布时间】:2021-06-14 13:39:56
【问题描述】:

我目前正在研究机器学习模型,并且正在进行特征工程。我正在使用一个数据集,该数据集表明 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

【问题讨论】:

    标签: python pandas statistics


    【解决方案1】:

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

    示例

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

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多