Вложенный цикл подсчитывает несколько раз одни и те же значения

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

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

person JonDoe    schedule 31.08.2018    source источник
comment
Используйте itertools.combinations для генерации уникальных пар индексов для перебора.   -  person kevinkayaks    schedule 31.08.2018
comment
@kevinkayaks, у вас есть пример, основанный на моей проблеме? Разве это невозможно через вложенный цикл?   -  person JonDoe    schedule 31.08.2018
comment
Если вы настроены на двойной цикл, я думаю, вы должны начать второй цикл со значением индекса в первом цикле. Рассмотрим этот пост stackoverflow.com/questions/29324025/   -  person kevinkayaks    schedule 31.08.2018
comment
Но я бы сгенерировал требуемые пары индексов с itertools.combinations и лично использовал бы один цикл.   -  person kevinkayaks    schedule 31.08.2018
comment
@kevinkayaks, хорошее начало во втором цикле с индексом вроде i + 1. Как я могу выполнить это на моем примере?   -  person JonDoe    schedule 31.08.2018
comment
Вместо использования df.iterrows() для настройки итератора я бы использовал for i,j in itertools.combinations(range(n),2), где n - количество столбцов в вашем фрейме данных. Тогда, думаю, row = df.iloc(i) и row2= df.iloc(j). Я действительно не знаю панд.   -  person kevinkayaks    schedule 31.08.2018
comment
Вы также можете использовать iloc с подходом двойного цикла. Ничто не требует использования df.iterrows()   -  person kevinkayaks    schedule 31.08.2018
comment
Я имел в виду строки, а не столбцы.   -  person kevinkayaks    schedule 31.08.2018
comment
@kevinkayaks, спасибо, единственная проблема, которую я вижу, это индексация на fact_date. Как я могу добиться этого, используя вложенные циклы?   -  person JonDoe    schedule 31.08.2018
comment
Извлеките столбец даты, и вы также можете проиндексировать его с помощью I и j   -  person kevinkayaks    schedule 31.08.2018
comment
@kevinkayaks, не могли бы вы показать это на основе добавленного мной нового кода? А затем опубликуйте его как ответ, чтобы я мог отметить его как окончательный.   -  person JonDoe    schedule 31.08.2018
comment
@kevinkayaks, не знаете как решить?   -  person JonDoe    schedule 01.09.2018