Python 嵌套循环对相同值进行多次计数
我试图创建一个嵌套循环来计算汽车型号名称之间的价格组合,例如: 这意味着我有一个制造商名称和型号名称的组合,以及收购价格的总和。不知何故,由于嵌套循环,我收到了两次结果,但只想得到一次。我想用下面这句话来解决这个问题:Python 嵌套循环对相同值进行多次计数,python,loops,for-loop,dataframe,nested-loops,Python,Loops,For Loop,Dataframe,Nested Loops,我试图创建一个嵌套循环来计算汽车型号名称之间的价格组合,例如: 这意味着我有一个制造商名称和型号名称的组合,以及收购价格的总和。不知何故,由于嵌套循环,我收到了两次结果,但只想得到一次。我想用下面这句话来解决这个问题: row['ManufactureName'] != row2['ManufactureName'] 但这只解决了相同的制造商名称的问题,而不是由于两个列表的结果是原来的两倍而导致的问题 希望有人能帮上忙 调整 我调整了嵌套循环的代码,但仍然像以前一样存在关于事实日期索引的问题。
row['ManufactureName'] != row2['ManufactureName']
但这只解决了相同的制造商名称的问题,而不是由于两个列表的结果是原来的两倍而导致的问题
希望有人能帮上忙
调整
我调整了嵌套循环的代码,但仍然像以前一样存在关于事实日期索引的问题。
调整后的代码:
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)
数据如下所示:
使用“itertools.combines”生成要迭代的唯一索引对over@kevinkayaks,你有基于我的问题的例子吗?通过嵌套循环不可能吗?如果设置为双循环,那么应该在第一个循环的索引值处开始第二个循环。考虑这个帖子,但是我会用<代码>迭代工具来生成所需的索引对,组合使用一个循环,personally@kevinkayaks,在第二个循环中有一个很好的起点,索引为i+1。我怎样才能在我的例子中表现出来呢?
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