如何为Pandas Dataframe中'date'列中的每个元素减去n个四分之一以创建一个新列?

2024-09-26 17:43:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个熊猫数据框:

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”基于列“Quarter”:

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

如果你能帮我做这件事,我将不胜感激!谢谢


Tags: 数据函数代码dfdate公司pd季度
1条回答
网友
1楼 · 发布于 2024-09-26 17:43:15

首先使用^{}Date列转换为datetime系列,然后使用^{}Quarter列映射到^{},并从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

相关问题 更多 >

    热门问题