#python #pandas #numpy
Вопрос:
У меня есть фрейм данных, df, в котором я хотел бы преобразовать длинные даты в соответствующие кварталы.
Данные
id date
a 10/1/2021
a 10/1/2021
a 7/1/2021
b 1/1/2021
b 2/1/2022
Желанный
id date
a Q4.21
a Q4.21
a Q3.21
b Q1.21
b Q1.22
Делающий
Я полагаю, что в python встроен этот скрипт преобразования. Однако я не уверен, как изменить формат, заглавные буквы и включить точку.
df['date'] = pd.PeriodIndex(df.date, freq='Q')
Вывод следующего кода является:
id date
a 2021Q4
a 2021Q4
a 2021Q3
b 2022Q1
b 2022Q1
Однако это не тот результат, который я хотел бы получить.
Любое понимание или предложения приветствуются.
Комментарии:
Ответ №1:
Используйте Period.strftime
и укажите строку формата:
df['date'] = pd.PeriodIndex(df['date'], freq='Q').strftime('Q%q.%y')
df
:
id date
0 a Q4.21
1 a Q4.21
2 a Q3.21
3 b Q1.21
4 b Q1.22
Ответ №2:
Попробуйте объединить столбцы строк при извлечении соответствующих компонентов.
df['qtr'] = 'Q' df['date'].dt.quarter.astype(str) '.'
df['date'].dt.strftime('%y')
df
id date qtr
0 a 2021-10-01 Q4.21
1 a 2021-10-01 Q4.21
2 a 2021-07-01 Q3.21
3 b 2021-01-01 Q1.21
4 b 2022-02-01 Q1.22
Причина , по которой я выбрал это, заключается в том, что извлечение номера квартала с помощью Q%q.%y
, как я впервые попытался, не работало на моем компьютере. Я локализовал проблему %q
на своем компьютере ( %y
работает нормально).
Комментарии:
1.
Period.strftime
Имеет доступ только к%q
.dt.strftime
имеет доступ только к стандартнымstrftime
параметрам (которые не включают%q
. Этот метод долженdf['date']
был бы иметь типdatetime
, в то времяPeriodIndex
как принимал бы столбец как есть.2. Я написал свой ответ против первоначальной версии вопроса, которая не имела ничего общего с индексом периода. В нем был только столбец даты в формате MDY.
3. Я понимаю. Я просто пытался сказать, что
Q%q.%y
это не работает на вашей машине, потому что (я предполагаю), что вы пыталисьdf['date'].dt.strftime('Q%q.%y')
, что не сработало бы. Это не проблема конкретно с%q
вашим компьютером.