#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.