【发布时间】: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