На мой взгляд, одного столбца Дата недостаточно. Ваш выходной DataFrame должен также содержать как минимум идентификатор сотрудника , чтобы знать, какой человек находится в отпуске в данный день.
Для выполнения вашей задачи определите следующую функцию:
def datesplit(data):
parts = []
for idx, row in data.iterrows():
parts.append(pd.DataFrame(row['Employee ID'], columns=['Employee ID'],
index=pd.date_range(start=row['Start Date'], end=row['End Date'],
name='Date')))
return pd.concat(parts).reset_index()
Эта функция:
- Для каждой исходной строки собираются «частичные DataFrames», на данный момент:
- единственный столбец - Идентификатор сотрудника ,
- индекс - это диапазон дат между начальной и конечной датами,
- данный ID сотрудника ( одиночное значение) фактически транслируется для всех строк (каждый день текущий сотрудник находится в отпуске).
- После l oop объединяет их и преобразует индекс ( Дата ) в «обычный» столбец.
Затем назовите его:
result = datesplit(plannedleave)
Чтобы проверить свой код, я использовал в качестве исходного DataFrame ( планировать выход ):
Employee ID First Name Last Name Leave Type Start Date End Date
0 1001 John Brown Xxxx 2020-05-10 2020-05-15
1 1002 Betty Smith Yyyy 2020-05-18 2020-05-22
Результат для вышеуказанных данных:
Date Employee ID
0 2020-05-10 1001
1 2020-05-11 1001
2 2020-05-12 1001
3 2020-05-13 1001
4 2020-05-14 1001
5 2020-05-15 1001
6 2020-05-18 1002
7 2020-05-19 1002
8 2020-05-20 1002
9 2020-05-21 1002
10 2020-05-22 1002