У меня есть фрейм данных pandas, в котором есть столбец даты, содержащий даты с датами первого дня («европейские») и первого месяца (американские). У меня есть отдельный столбец типа int, содержащий значения 'year'. Строки даты df.year <2017 являются первыми месяцами, а строки df.year> 2017 - первыми.
Я использую условие np.where, чтобы отделить месяц и день от строк датыв отдельные столбцы, чтобы построить дату и время после этого. Итак, у меня есть эти данные:
'year' 'number' 'date'
2016 75 01/05/2017 00:00
2016 75 01/06/2017 00:00
2016 75 01/06/2017 00:00
2016 75 01/06/2017 00:00
2016 75 01/06/2017 00:00
2016 75 01/09/2017 00:00
2016 75 01/09/2017 00:00
2016 75 01/10/2017 00:00
2016 75 01/10/2017 00:00
2017 0 01/01/2017 00:00
2017 0 01/01/2017 00:00
2017 0 01/01/2017 00:00
2017 0 01/01/2017 00:00
2017 0 02/01/2017 00:00
2017 0 03/01/2017 00:00
2017 0 04/01/2017 00:00
2017 0 04/01/2017 00:00
2017 0 04/01/2017 00:00
2017 0 04/01/2017 00:00
2017 0 05/01/2017 00:00
Я уже использовал это для создания значений месяца:
df['dt_mo'] = np.where(df.year<2017,df.date.str.extract(r'(\d+)\/\d+\/\d+'), df.date.str.extract(r'\d+\/(\d+)\/\d+'))
Это прекрасно работает для удаления месяца. Я пробовал и другие методы, но так как ['year'] имеет тип (int), это работает нормально
Однако, когда я пытаюсь выполнить аналогичный процесс для извлечения значения дня, выдается ошибка.
Я попытался перевернуть оператор «больше / меньше», а также поменять местами группы захвата.
(1)sl['dt_dy'] = np.where(sl.year>2017, sl.date.str.extract(r'(\d+)\/\d+\/\d+'),sl.date.str.extract(r'\d+\/(\d+)\/\d+'))
или
(2)df['dt_dy'] = np.where(df.year<2017,df.date.str.extract(r'\d+\/(\d+)\/\d+'), df.date.str.extract(r'(\d+)\/\d+\/\d+'))
Оба возвращают следующую общую ошибку:«ValueError: неверное количество пропущенных элементов 2, размещение подразумевает 1».
В идеале df.dt_dy должен возвращать значение дня, так же как df.dt_mo в настоящее время возвращает значение месяца.
Как всегда, был бы более признателен за любые чистые подходы
Спасибо