そのため、データフレームでリリース日(リリース日は製品を見つけることができる最も早い日付)を検索し、データフレームの現在の日付からそれを引くことによって、特定の製品の年齢を計算しようとしています。ただし、リリース日の検索には非常に時間がかかります(このスレッドを作成するまでに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
次のことを試してください(テストするデータがないため、機能しているかどうかはわかりません)
#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()
コードの問題は、データセットを非効率的にループしていることです。通常、これは「Vectorization with NumPy」を使用して取り除くことができます。詳細については、パンダの最適化を確認してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加