Создать серию дат с помощью Pandas - PullRequest
0 голосов
/ 05 июля 2018

У меня есть дата-фрейм с датой начала и окончания для нескольких человек:

# input df    
df_input = pd.DataFrame([
        ["John", "2018-08-03", "2018-08-05"],
        ["Jack", "2018-08-20", "2018-08-21"]
])
df_input.columns = ["name", "start_day", "finish_day"]

Я хочу создать диапазон дат для всех людей (я хочу, чтобы pd.Series содержал диапазон дат):

# output df
df_output = pd.DataFrame([
    ["John", "2018-08-03", "2018-08-05", "['2018-08-03', '2018-08-04', '2018-08-05']"],
    ["Jack", "2018-08-20", "2018-08-21", "['2018-08-20', '2018-08-21']"]
])
df_output.columns = ["name", "start_day", "finish_day", "date_range"]

Я не знаю, как создать этот диапазон.
Есть идеи?

1 Ответ

0 голосов
/ 06 июля 2018

Вызывающий и интересный! Я думаю, что следующий фрагмент довольно близок к тому, что вы просите, хотя форма немного отличается от того, что вы запросили. Тем не менее, реструктурированная форма вывода содержит диапазон дат, имя и дату окончания.

import pandas as pd
df_input = pd.DataFrame([["John", "2018-08-03", "2018-08-05"],["Jack", "2018-08-20", "2018-08-21"]], columns=['Name','Start_Date','End_Date'])
df_input['Start_Date'] =  pd.to_datetime(df_input['Start_Date'], format='%Y-%m-%d')
df_input['End_Date'] =  pd.to_datetime(df_input['End_Date'], format='%Y-%m-%d')
df_input.set_index('Start_Date', inplace=True)
def reindex_by_date(df_input):
    dates = pd.date_range(df_input.index.min(), df_input['End_Date'].min())
    return df_input.reindex(dates).ffill()
finaldf = df_input.groupby('Name').apply(reindex_by_date)
finaldf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...