Со списком дат начала (ММ-ДД) переберите столбец с датами окончания (ГГГГ-ММ-ДД), найдите год начала, который на один год раньше даты окончания года

У меня есть два набора данных. Один содержит данные об окружающей среде за 63 года со значениями для каждой даты (~23 тыс. дат), второй содержит список дат (~1 тыс.), когда были взяты пробы окружающей среды. Мне нужно суммировать значения из первого набора с датой окончания из второго набора. Проблема со сценарием заключается в том, что дата начала будет передаваться в виде списка MM-DD, а год всегда будет в году, предшествующем дате окончания. Например, если конечными датами являются 16 февраля 1973 г. и 09 апреля 1988 г., а датой начала является 15 ноября, то соответствующий год начальной даты для каждой конечной даты будет 15 ноября 1972 г. и 15 ноября 1987 г. .

Поэтому, как мне перебирать список дат окончания, для каждого года даты окончания вычесть один год, добавить этот год к дате начала, чтобы затем я мог суммировать значения между датами начала и окончания (где я затем буду хранить значение в столбце рядом с датой окончания)? Камнем преткновения Python для меня является то, как получить дату начала в формате ГГГГ-ММ-ДД, чтобы я мог суммировать значения между двумя датами. Ниже представлены наборы данных, созданные в иллюстративных целях.

Со списком дат начала (ММ-ДД) переберите столбец с датами окончания (ГГГГ-ММ-ДД), найдите год начала, который на один год раньше даты окончания года

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создание выборочных наборов данных

import pandas as pd
import numpy as np
import datetime


dat_r = pd.date_range('1972-11-12', '1988-04-10')
dataset_1 = pd.DataFrame({'DATE': dat_r, 'VALUE':np.random.rand(dat_r.__len__())})

dataset_2 = pd.DataFrame({'END DATE': [datetime.date(1973,2,16), datetime.date(1974,1,12), datetime.date(1975,5,23), datetime.date(1981,3,3)]})
list_of_start_dates = pd.DataFrame({'DATE (Start)': ['09-01', '10-15', '11-30', '12-05']})

Вы можете построить нужный набор данных следующим образом:

dff = pd.DataFrame(index=dataset_2['END DATE'], columns=list_of_start_dates['DATE (Start)'])

dff = dff.melt(ignore_index=False)

Год можно добавить к дате, вот так

dff['AUX'] = pd.to_datetime(dff.index.map(lambda x: str(x.year-1))+"-"+dff['DATE (Start)'])

Другие вопросы по теме