Как преобразовать даты в четверти в Python?

Я хотел бы преобразовать столбец даты в индикатор квартала конкретного года, например 2018q1 или 2018q2 и т. д.

Мои данные выглядят так: у меня доходность акций один раз в квартал (столбец возврата здесь не отображается) и соответствующая дата, квартал столбца - это то, что я хотел бы получить (или что-то подобное)

data = [{'date': '3/22/18', 'quarter': 1},{'date': '3/22/18', 'quarter': 1}, 
{'date': '6/22/18', 'quarter': 3},{'date': '6/22/18', 'quarter': 3},
{'date': '9/22/18', 'quarter': 2},{'date': '9/22/18', 'quarter': 2}]
df = pd.DataFrame(data, index=['s1', 's2','s1','s2','s1','s2'])

        date  quarter
 s1  3/22/13       2013q1
 s2  3/24/13       2013q1
 s1  6/21/13       2013q2
 s2  6/26/13       2013q2
 s1  9/21/13       2013q3
 s2  9/28/13       2013q3
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
0
16 404
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Просто извлеките месяц из строки даты. Квартал можно просто получить через month // 4 + 1.

Поскольку ваши данные представляют собой словарь, ключ 'date' которого представляет собой str формы (\d{1:2})/(\d{1:2})/(\d\d), вы можете получить часть даты «месяц» (первая группа), преобразовать ее в int и использовать month // 4 + 1 для получения квартала.

Извлечение части месяца из строки даты может быть выполнено с помощью регулярного выражения или даже простой нарезки строки. Таким образом, четверть колеблется от 1 до 4 и определяется:

  • m // 4 равен 0 для 1 <= m <= 3 (Q1)
  • m // 4 равен 1 для 4 <= m <= 6 (Q1)
  • m // 4 равен 2 для 7 <= m <= 9 (Q1)
  • m // 4 равен 3 для 10 <= m <= 12 (Q1)

to_datetime:

df.date = pd.to_datetime(df.date)

PeriodIndex

df['quarter'] = pd.PeriodIndex(df.date, freq='Q')

         date quarter
s1 2018-03-22  2018Q1
s2 2018-03-22  2018Q1
s1 2018-06-22  2018Q2
s2 2018-06-22  2018Q2
s1 2018-09-22  2018Q3
s2 2018-09-22  2018Q3

.date не будет работать, так как это функция фрейма данных.

df_q8['Date'] = pd.to_datetime(df_q8['Date'])
df_q8['quarter'] = pd.PeriodIndex(df_q8['Date'] ,freq='Q')

Спасибо, Куш !!!

Niccola Tartaglia 05.04.2021 21:24

Функция datecolumn.dt.quarter поможет.

df.date = pd.to_datetime(df.date)
df["Quarter"] = df.date.dt.quarter

Series.dt.to_period

import pandas as pd
df['date'] = pd.to_datetime(df['date'])

df['quarter'] = df['date'].dt.to_period('Q')

         date quarter
s1 2018-03-22  2018Q1
s2 2018-03-22  2018Q1
s1 2018-06-22  2018Q2
s2 2018-06-22  2018Q2
s1 2018-09-22  2018Q3
s2 2018-09-22  2018Q3
Ответ принят как подходящий

У Pandas есть метод, который может вам помочь, он называется pd.PeriodIndex (monthcolumn, freq = 'Q'). Вам может потребоваться сначала преобразовать столбец месяца в тип данных с помощью библиотеки datetime.

У Pandas также есть метод to_date, который можно использовать для преобразования столбца в столбец даты.

Например:

df ["год"] = pd.to_date (df ["год"])

Другие вопросы по теме