Я хотел бы преобразовать столбец даты в индикатор квартала конкретного года, например 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






Просто извлеките месяц из строки даты. Квартал можно просто получить через 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
df_q8['Date'] = pd.to_datetime(df_q8['Date'])
df_q8['quarter'] = pd.PeriodIndex(df_q8['Date'] ,freq='Q')
Функция datecolumn.dt.quarter поможет.
df.date = pd.to_datetime(df.date)
df["Quarter"] = df.date.dt.quarter
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 ["год"])
Спасибо, Куш !!!