Оптимизация цикла iterrows с несколькими ссылками на столбцы в Python

#python #pandas

#питон #панды

Вопрос:

 for index, row in data2.iterrows():
  date_selection = (data1['Start Time'] > row['shifted_date']) amp; (data1['Start Time'] <= row['Timestamp'])
  relevant_data = data1.loc[date_selection]
  data2.loc[index, 'Relevant_Duration_Sum'] = relevant_data['Duration'].sum()
 

Всем привет,

Я пытаюсь запустить цикл над большим набором данных, как показано выше, и хочу оптимизировать этот цикл. Я пытался преобразовать его в функцию для использования .apply , однако я действительно застрял в apply циклах по одному столбцу за раз, а не по одной строке за раз, и я ссылаюсь на несколько столбцов и делаю присваивание в последней строке.

Я действительно застрял на этом, и любые предложения действительно помогли бы.

Спасибо

Ответ №1:

Пожалуйста, попробуйте использовать приведенный ниже код. (Я не смог проверить выходные данные, так как не было доступных данных)

 def relevant_duration_sum(_shifted_date, _timestamp):
  rel_duration_sum = data1.loc[(data1['Start Time'] > _shifted_date) amp; (data1['Start Time'] <= _timestamp), 'Duration'].sum()
  return rel_duration_sum

data2['Relevant_Duration_Sum'] = data1.apply(lambda x: relevant_duration_sum(x['Shifted_date'], x['Timestamp']), axis=1)
 

Надеюсь, это решит вашу проблему!

Комментарии:

1. Спасибо! Отлично работал и значительно сократил время обработки. Я внес небольшую правку в ваш ответ, чтобы исправить ссылку на df.