Функция не перебирает все значения и не останавливается после первого значения в цикле - PullRequest
0 голосов
/ 14 июля 2020

Я новичок в python, извините, если я не понимаю. Я пытаюсь создать al oop, чтобы получить среднюю скользящую стоимость для различных продуктов. У меня есть набор данных, который содержит более 55000 продуктов (my_product_id) и их стоимость за каждый месяц с 01.01.2019. Я пытаюсь создать функцию для получения скользящей средней стоимости за последние 3 месяца. Пока что я написал эту функцию, которая работает, но работает только для одного продукта и после этого останавливает l oop. Мне нужно запустить эту функцию для всех уникальных идентификаторов продуктов в столбце. Вот как выглядит мой набор данных

введите описание изображения здесь

def abc(df_189):
    dfObj = pd.DataFrame(columns=['my_product_id', 'Cost'])
    my_products = df_189.my_product_id.unique()
    for i in my_products:
        df_test = df_189[df_189.my_product_id == i]
        
        Grouped=df_test.groupby('date')
        
        GetWeightAvg=lambda g: np.average(g['cost'], weights=g['quantity'])
        
        pr=Grouped.apply(GetWeightAvg).sort_index(ascending=False).head(3).mean()
        
        dfObj = dfObj.append({'my_product_id': i, 'Cost': pr}, ignore_index=True)
        return dfObj

Это возвращает Dataframe только из одной строки идентификатора первого продукта, поэтому он работает правильно, но останавливается после первого продукта.

Заранее спасибо :)

1 Ответ

1 голос
/ 14 июля 2020

Попробуйте вывести return из l oop вот так:

def abc(df_189):
    dfObj = pd.DataFrame(columns=['my_product_id', 'Cost'])
    my_products = df_189.my_product_id.unique()
    for i in my_products:
        df_test = df_189[df_189.my_product_id == i]
        
        Grouped=df_test.groupby('date')
        
        GetWeightAvg=lambda g: np.average(g['cost'], weights=g['quantity'])
        
        pr=Grouped.apply(GetWeightAvg).sort_index(ascending=False).head(3).mean()
        
        dfObj = dfObj.append({'my_product_id': i, 'Cost': pr}, ignore_index=True)
    return dfObj
...