Я пытаюсь создать вложенный цикл для расчета комбинаций цен между 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