Pandas iterrows переходит к новому индексу, строка для продолжения итерации

#python #pandas #iteration

#python #pandas #итерация

Вопрос:

Отличные результаты,

Я знаю, что iterrows может быть не лучшим способом выполнить это, поэтому я открыт и для других идей, но я действительно хотел бы знать, как сделать следующее:

Скажем, у меня есть цикл внутри цикла (yikes!) проходя через тот же фрейм данных, и когда я заканчиваю второй цикл, я хочу, чтобы индекс, строка в первом цикле начиналась с того места, где закончился второй цикл (т.Е. index = index2 в коде ниже). Вот мой пример кода:

     from pandas import *

    df = DataFrame(
        {'to': ['spot1', 'spot2', 'spot3', 'spot4', 'spot1', 'spot3', 'spot5'],
         'from': ['Denver','Denver','Denver','Denver','Cleveland','Cleveland','Timbuktu']})`

    for index, row in df.iterrows():     #iterate to find functions for measurement    
        
        value1 = row['from'] 
                
        for index2, row2 in islice(df.iterrows(), index 1, None):  #use islice to start on next row

            value2 = row2['from']

            if value1 != value2:            
                print('leaving from new destination)
                
                index = index2  #start outside loop at location where inside loop finished (ie value1 = Cleveland on second outside iteration)             
                
                break   #stop loop to prevent needless looping

            elif value1 == value2:
        
                print('still leaving from same destination)

  

Ответ №1:

Ну, я думаю, вам нужен только один для, например:

 import pandas as pd
df = pd.DataFrame(
  {
     'to': ['spot1', 'spot2', 'spot3', 'spot4', 'spot1', 'spot3', 'spot5'],
     'from':['Denver','Denver','Denver','Denver','Cleveland','Cleveland','Timbuktu']
  }
)
current_idx = df.iloc[0].name  # get first index
current_from = df.loc[current_idx, "from"]

for idx, row in df.iloc[1:].iterrows():  # Iter from the second row
  if current_from == row["from"]:
    print('still leaving from same destination')
  else:
     print('leaving from new destination')
     current_idx = idx
     current_from = row["from"]
  

Честно говоря, вам не нужно сохранять индекс, хахах