#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"]
Честно говоря, вам не нужно сохранять индекс, хахах