Я пытаюсь создать вложенный цикл для расчета комбинаций цен между именем модели автомобиля, например:
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
itertools.combinations
и лично использовал бы один цикл. - person kevinkayaks   schedule 31.08.2018df.iterrows()
для настройки итератора я бы использовалfor i,j in itertools.combinations(range(n),2)
, гдеn
- количество столбцов в вашем фрейме данных. Тогда, думаю,row = df.iloc(i)
иrow2= df.iloc(j)
. Я действительно не знаю панд. - person kevinkayaks   schedule 31.08.2018iloc
с подходом двойного цикла. Ничто не требует использованияdf.iterrows()
- person kevinkayaks   schedule 31.08.2018