如何使用groupby在python中提取与每个截止日期相关的最接近到期日期



我目前正在研究各种未来曲线。每个截止日期都有一个可用的期货曲线列表。我的最终目标是提取截止日期每个人的到期日值。下面是我的数据帧的一个例子

asOfDate maturityDate  value
0  2017-10-02   2017-10-01  406.8
1  2017-10-02   2017-11-01  406.8
2  2017-10-02   2017-12-01  398.3
3  2017-10-02   2018-01-01  398.3
4  2017-10-02   2018-02-01  390.2
5  2017-10-02   2018-03-01  390.2
6  2017-10-02   2018-04-01  380.5
7  2017-10-02   2018-05-01  380.5
8  2017-10-02   2018-06-01  385.0
9  2017-10-02   2018-07-01  385.0
10 2017-10-02   2018-08-01  385.0
11 2017-10-02   2018-09-01  385.0
12 2017-10-02   2018-10-01  383.2
13 2017-10-02   2018-11-01  383.2
14 2017-10-03   2017-10-01  410.4
15 2017-10-03   2017-11-01  410.4
16 2017-10-03   2017-12-01  400.8
17 2017-10-03   2018-01-01  400.8
18 2017-10-03   2018-02-01  392.5
19 2017-10-03   2018-03-01  392.5

最终目标是每个到期日期相对于每个截止日期最接近的值的列表。因此,给定上述数据集,所需的输出将是

asOfDate maturityDate  value
0  2017-10-02   2017-10-01  406.8
14 2017-10-03   2017-10-01  410.4

考虑到合同在2017-10-02接近asOfDate是2017-10-01,而2017-10-03最接近的是同一合同。

我的想法是,到目前为止,我可以为每个人进行某种类型的分组,这是我迄今为止测试的

df_lumber[df_lumber['maturityDate']==df_lumber.groupby(['asOfDate'])['maturityDate'].apply(min)]

我正在尝试匹配当前的到期日,以匹配每个截止日期的最小到期日,理论上应该是我想要的。

OP离所需输出不远。

首先,确保两列都是datetimepandas.to_datetime

df['asOfDate'] = pd.to_datetime(df['asOfDate'])
df['maturityDate'] = pd.to_datetime(df['maturityDate'])

然后,这将完成的工作

df[df["maturityDate"] == df.groupby("asOfDate")["maturityDate"].transform(min)]
[Out]:
asOfDate maturityDate  value
0  2017-10-02   2017-10-01  406.8
14 2017-10-03   2017-10-01  410.4

备注:

  • 一种是按asOfDatepandas.DataFrame.groupby分组。

  • 对于每个组,使用.transform('min')来获得列maturityDate的最小值。

相关内容

  • 没有找到相关文章

最新更新