Python Pandas: создать новый столбец, содержащий диапазон дат

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных отеля с 2 столбцами: регистрация заезда и отъезда. Я хотел бы создать новый столбец, содержащий ряд дат, начиная от регистрации до выписки.

введите описание изображения здесь

пример: регистрация заезда = 2019-10-02, выезд = 2019-10-04. в новом столбце должен быть ряд дат: 2019-10-02, 2019-10-03, 2019-10-04. Примените ту же логику для каждой строки. Пожалуйста, посоветуйте, как мне это сделать с Python Pandas.

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

1. [pd.date_range(x, y) для x, y в zip (df.check-in,df.check_out)]

Ответ №1:

Вы можете попробовать это:

 df['check_in'] = pd.to_datetime(df['check_in'])
df['check_out'] = pd.to_datetime(df['check_out'])
df['range'] = df.apply(lambda x: list(pd.date_range(x['check_in'], x['check_out'])), axis=1)
print(df)

    check_in  check_out                                              range
0 2019-10-02 2019-10-04  [2019-10-02 00:00:00, 2019-10-03 00:00:00, 201...
  

Ответ №2:

Предполагая, что ваши оба столбца доступны в серии datetime.

Приведенный ниже код должен предоставить вам диапазон в требуемом формате с новым столбцом.

 df['range'] = df.apply(lambda x: pd.date_range(x['check_in'], x['check_out']).format('%Y-%m-%d')[1:], axis=1)
  

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

1. у меня работают оба кода, единственное отличие — формат даты. Я хотел бы спросить: (1) можем ли мы использовать range(check_in, check_out) вместо pd.date_range()? (2) «x» в лямбда-выражении x: pd.date_range(x[‘check_in’], x[‘check_out’]; ссылается ли это на фрейм данных? (3) Я пытался сделать это следующим образом: pd.date_range(df[‘check_in’], df[‘check_out’]) с ошибкой: TypeError: не удается преобразовать входные данные [0 2018-07-01. В чем может быть причина? (4) в чем разница между использованием pd.date_range() с apply() и без apply()?

2. 1) range () нельзя использовать для строки, он принимает только целое число в качестве входных данных. 2) Да, вы можете проверить синтаксис лямбда онлайн 3) df[‘check_in’] возвращает серию, а pd.date_time это не принимает. Он принимает строку, отформатированную как дата 4) Функция apply() используется для применения функции вдоль оси фрейма данных или ряда. В данном случае axis1 (столбец) для столбца check_in и check_out.