Ищите способ ускорить поиск данных в фреймах pandas - PullRequest
2 голосов
/ 06 апреля 2019

Итак, я пытаюсь рассчитать возраст данного продукта, посмотрев дату его выпуска в кадре данных (дата выпуска - самая ранняя дата, в которую мы можем найти продукт) и вычтя его из текущей даты в dataframe. Тем не менее, поиск даты релиза занимает так много времени (2 часа к тому времени, когда я создаю эту тему). Примечание. Датафрейм содержит более 300 тыс. Строк.

Я использую метод .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

1 Ответ

1 голос
/ 06 апреля 2019

Попробуйте следующее (я не уверен, работает ли он, потому что у меня нет данных для его проверки)

#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». Вы можете проверить Оптимизация панд для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...