Как мне вычесть n кварталов из каждого элемента в столбце `date` в кадре данных Pandas, чтобы создать новый столбец? - PullRequest
1 голос
/ 14 июля 2020

У меня есть Pandas DataFrame вроде этого:

Firm     Date          Quarter
A        2019-06-30    0
A        2019-06-30    1
A        2019-06-30    2
A        2019-06-30    3
B        2017-06-30    0 
B        2017-06-30    1
B        2017-06-30    2 
B        2017-06-30    3

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

Firm     Date          Quarter  QDate
A        2019-06-30    0        2019-06-30
A        2019-06-30    1        2019-03-31
A        2019-06-30    2        2018-12-31
A        2019-06-30    3        2018-09-30
B        2017-06-30    0        2017-06-30
B        2017-06-30    1        2017-03-31
B        2017-06-30    2        2016-12-31 
B        2017-06-30    3        2016-09-30

с учетом того, что у меня большое количество компаний и разные значения в столбце Date, я бы хотел бы знать, как создать функцию, которую я мог бы использовать, чтобы делать это автоматически, я знаю, что есть функция: pd.tseries.offsets.QuarterEnd(), поэтому, по сути, я предполагаю, что он будет применять следующий код к каждой из строк набора данных, но с параметр 'n' основан на столбце «Квартал»:

df["QDate"] = df["Date"] - pd.tseries.offsets
.QuarterEnd(n = 0, 1, 2, 3...)

Был бы очень признателен, если бы вы мне помогли с этим! Спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

Сначала используйте pd.to_datetime, чтобы преобразовать столбец Date в ряд pandas datetime, затем используйте Series.map, чтобы сопоставить столбец Quarter с pd.offsets.QuarterEnd и вычтите его из Date, чтобы получить желаемый результат:

df['Date'] = pd.to_datetime(df['Date'])
df['QDate'] = df['Date'] - df['Quarter'].map(pd.offsets.QuarterEnd)

Результат:

  Firm       Date  Quarter      QDate
0    A 2019-06-30        0 2019-06-30
1    A 2019-06-30        1 2019-03-31
2    A 2019-06-30        2 2018-12-31
3    A 2019-06-30        3 2018-09-30
4    B 2017-06-30        0 2017-06-30
5    B 2017-06-30        1 2017-03-31
6    B 2017-06-30        2 2016-12-31
7    B 2017-06-30        3 2016-09-30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...