Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套循环对相同值进行多次计数_Python_Loops_For Loop_Dataframe_Nested Loops - Fatal编程技术网

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