Вложенный цикл подсчитывает несколько раз одинаковые значения - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь создать вложенный цикл для расчета комбинаций цен между Car ModelName, например:

fact_date     CarID   Country  Type   ManufactureNameSum      Sum_Costs
2017-07-14    1       USA      Car    Ford_Focus____VW_Jetta  34003

, что означает, что у меня есть комбинация ManufactorName и ModelName и сумма AcquisitionPrice . Каким-то образом я получаю результаты дважды из-за вложенного цикла, но просто хочу иметь один раз. Я думал решить ее со следующей строкой:

row['ManufactureName'] != row2['ManufactureName']

, но это решает проблему только с тем же ManufactureName , но не с тем, у которого из-за двух списков результат удваивается.

Надеюсь, здесь кто-нибудь может помочь.

Настройка

Я изменил код для вложенного цикла, но у меня все еще есть проблема с индексацией fact_date, как и раньше.

Скорректированный код :

import pandas as pd

df = pd.read_csv('C:/Sales_Cars.csv', encoding='cp1252', sep=';', index_col=0).dropna()
df2 = pd.DataFrame([])
for current_date in df.index.unique():
    for i in range(0, len(df)):
        for j in range(i+1, len(df)):
            if (
                    df.iloc[i]['ManufactureName'] != df.iloc[j]['ManufactureName'] and
                    df.iloc[i]['CarID'] == df.iloc[j]['CarID'] and
                    df.iloc[i]['Country'] == df.iloc[j]['Country']):
                df2 = df2.append(
                    pd.DataFrame({
                        'CarID': df.iloc[i]['CarID'],
                        'Country': df.iloc[i]['Country'],
                        'Type': df.iloc[i]['Type'],
                        'ManufactureNameSum': (
                            df.iloc[i]['ManufactureName'] +
                            '_' +
                            df.iloc[i]['ModelName'] +
                            '____' +
                            df.iloc[j]['ManufactureName'] +
                            '_'+df.iloc[j]['ModelName']
                        ),
                        'Sum_Costs': (
                            df.iloc[i]['AcquisitionPrice'] +
                            df.iloc[j]['AcquisitionPrice']
                        )
                    }, index=[0]), ignore_index=True) 
print(df2) 

Данные выглядят следующим образом:

fact_date CarID   ManufactureName ModelName    Type   Country AcquisitionPrice
2017-07-14    1   Ford            Focus        Car    USA 11640
2017-07-14    2   Ford            Mustang      Car    USA 12994
2017-07-14    3   Ford            Fiesta       Car    USA 12842
2017-07-14    4   Ford            Mondeo       Car    USA 14685
2017-07-14    1   VW              Jetta        Car    USA 22363
2017-07-14    2   VW              Polo         Car    USA 20107
2017-07-14    3   VW              Golf         Car    USA 21256
2017-07-14    4   VW              Parteon      Car    USA 23679
2017-07-14    1   Toyota          Prius        Car    USA 14384
2017-07-14    2   Toyota          Avensis      Car    USA 14821
2017-07-14    3   Toyota          Corolla      Car    USA 12480
2017-07-14    4   Toyota          Land Cruiser Car    USA 11502
2017-07-14    1   BMW             1er          Car    USA 35127
2017-07-14    2   BMW             2er          Car    USA 43924
2017-07-14    3   BMW             3er          Car    USA 40573
2017-07-14    4   BMW             4er          Car    USA 36690
2017-07-14    1   Mercedes        C-Klasse     Car    USA 36646
2017-07-14    2   Mercedes        A-Klasse     Car    USA 40912
2017-07-14    3   Mercedes        B-Klasse     Car    USA 39060
2017-07-14    4   Mercedes        E-Klasse     Car    USA 41838
...