python - 寻找一种加速熊猫数据框搜索的方法
问题描述
所以我试图通过在数据框中查找其发布日期(发布日期是我们可以找到产品的最早日期)并从数据框中的当前日期中减去它来计算给定产品的年龄。但是,搜索发布日期占用了很多时间(在我制作这个帖子时需要 2 小时)。注意:Dataframe 有超过 300k 行。
我在熊猫中使用 .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
解决方案
尝试以下操作(我不确定它是否有效,因为我没有数据来测试它)
#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 进行矢量化”来摆脱这种情况。您可以查看优化 Pandas以获取更多信息。
推荐阅读
- c# - WebDriverdll 中发生 SeleniumWebDriverException 类型的未处理异常使用 EdgeDriver 引发了具有空响应的异常
- javascript - Socketio 错误配置,不会连接/登录连接
- javascript - Javascript data.map 不是函数
- php - 当我将 PHPDoc 添加到方法时,阻止 PhpStorm 更正我的代码
- flutter - 在flutter中编写http post请求的方法
- web-scraping - 如何使用 html5ever 解析页面并找到所有链接?
- visual-studio-code - 对于在 Julia 中作为参数传递的函数,VSCode 错误“传递的函数参数数量不正确”
- javascript - Javascript 正则表达式 - 如果不匹配 url 的一部分继续
- python - 从 URL 中检索文件而不首先将其加载到 RAM 中
- r - glm.fit:拟合概率为 0 或 1