因此,我试图通过在数据框中查找其发布日期(发布日期是我们可以找到该产品的最早日期),并从日期中减去该日期,来计算给定产品的寿命。数据框。但是,对于发布日期的搜索占用了很多时间(到我制作此主题的时间为止为2个小时)。 注意:数据框有超过30万行。
我在熊猫中使用.loc方法,这似乎是问题的根源。
#Age Calculation
def item_age(release,current):
age = (current - release) / timedelta(days=365.2425)
age="%.3f" % age
return age
#Get the release date of a given item
def getItem_releaseDate(sales_data,index):
date=sales.loc[(sales.item_id==index),'date']
release=[]
for i in date:
release.append(datetime.datetime.strptime(i,'%d.%m.%Y'))
mini=min(release)
return mini
#Appending age to item
def getItem_age(sales_data):
sales=sales_data
sales['age']=0
for index,row in sales.iterrows():
current=datetime.datetime.strptime(row['date'],'%d.%m.%Y')
release=getItem_releaseDate(sales_data,row["item_id"])
row["age"]=item_age(release,current)
return sales
答案 0 :(得分:1)
尝试以下操作(我不确定是否可以正常运行,因为我没有数据可以对其进行测试)
#Appending age to item
def getItem_age(sales_data):
sales_data['age']=item_age(sales_data.date.values, getItem_releaseDate(sales_data,sales_data.item_id.values))
return sales_data
#Age Calculation
def item_age(release,current):
age = (current - release) / timedelta(days=365.2425)
age="%.3f" % age
return age
#Get the release date of a given item
def getItem_releaseDate(sales_data,index):
return sales_data.loc[sales_data.item_id == index].date.min()
代码的问题是您在数据集上的循环效率很低。通常,您可以使用“使用NumPy进行矢量化”来摆脱这种情况。您可以查看Optimizing Pandas了解更多信息。