У меня есть два кадра данных, master_source
и main_df
.Я хочу добавить start_date
и end_date
из main_df
в master_source
, так как это в конечном итоге позволит мне установить совпадающие индексы на обоих фреймах данных для слияния.
Моя первоначальная логика заключается в проверке 1), совпадает ли market
в обоих кадрах данных, и 2), если viewed_date
в master_source
находится между start_date
и end_date
в main_df
.Если все условия подтвердятся, я хочу добавить start_date
и end_date
к master_source
.
Обратите внимание, что viewed_date
, start_date
и end_date
уже преобразованы в объекты даты и времени.
Вот примеры входных данных для каждого кадра данных:
master_source
viewed_date market
2019-04-15 Abilene, TX
2019-04-11 Yuma, AZ
2019-04-19 Abilene, TX
main_df
market start_date end_date
Abilene, TX 2019-04-11 2019-04-17
Yuma, AZ 2019-04-11 2019-04-17
Abilene, TX 2019-04-18 2019-04-26
Мой код:
def add_dates(row):
matches = main_df[
(main_df['market'] == row['market']) &
(row['viewed_date'].between(main_df['start_date'], main_df['end_date']))]
start = matches['start_date'].values[0] if len(matches) > 0 else None
end = matches['end_date'].values[0] if len(matches) > 0 else None
row.loc['start_end', 'end_date'] = start, end
return row
master_source = master_source.apply(add_dates, axis=1)
Пока что мои известные проблемы - это ошибка AttributeError: ("'Timestamp' object has no attribute 'between'", 'occurred at index 0')
, и я не чувствую, что правильно добавляю два новых столбца, а не простоодин новый столбец.