Python 使用';日期时间';索引,如果日期介于当前索引和上一个索引之间

Python 使用';日期时间';索引,如果日期介于当前索引和上一个索引之间,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有两个数据帧stockData和EPSdata,如下所示。 stockData将 Close Date 2018-12-31 157.066376 2018-09-30 223.994431 2018-06-30 183.036682 2018-03-31 165.263504 2017-12-31 166.014908 2017-09-30 150.650375 2017-06-30 140.227097 2017-03-31 139.301605

我有两个数据帧
stockData
EPSdata
,如下所示。
stockData

            Close 
Date
2018-12-31  157.066376
2018-09-30  223.994431
2018-06-30  183.036682
2018-03-31  165.263504
2017-12-31  166.014908
2017-09-30  150.650375
2017-06-30  140.227097
2017-03-31  139.301605
2016-12-31  111.821404
2016-09-30  108.589523
2016-06-30  91.333252
2016-03-31  103.495514
2015-12-31  99.414101
2015-09-30  103.730179
......
           Surprise_perc
Date
2018-11-01          4.30
2018-07-31          7.83
2018-05-01          1.49
2018-02-01          1.83
2017-11-02         10.70
2017-08-01          6.37
2017-05-02          3.96
2017-01-31          4.35
2016-10-25          0.60
2016-07-26          2.16
.......
EPSData

            Close 
Date
2018-12-31  157.066376
2018-09-30  223.994431
2018-06-30  183.036682
2018-03-31  165.263504
2017-12-31  166.014908
2017-09-30  150.650375
2017-06-30  140.227097
2017-03-31  139.301605
2016-12-31  111.821404
2016-09-30  108.589523
2016-06-30  91.333252
2016-03-31  103.495514
2015-12-31  99.414101
2015-09-30  103.730179
......
           Surprise_perc
Date
2018-11-01          4.30
2018-07-31          7.83
2018-05-01          1.49
2018-02-01          1.83
2017-11-02         10.70
2017-08-01          6.37
2017-05-02          3.96
2017-01-31          4.35
2016-10-25          0.60
2016-07-26          2.16
.......
如何组合这两个数据帧?
EPSData
中的第一个数据点“
2018-11-01 4.30
”应添加到
stockData
中的Q4中,即数据点“
2018-12-31 157.066376

输出应该如下所示

            Close       Surprise_perc
Date
2018-12-31  157.066376  4.30
2018-09-30  223.994431  7.83
2018-06-30  183.036682  1.49
2018-03-31  165.263504  1.83
2017-12-31  166.014908  10.70
2017-09-30  150.650375  6.37
2017-06-30  140.227097  3.96
2017-03-31  139.301605  4.35
2016-12-31  111.821404  0.60
2016-09-30  108.589523  2.16
.....
此处,两个数据帧都按日期编制索引。

用于:


@Shijith-有可能用这个新问题创建新问题吗?@Shijith-但有一个想法是使用一点hack-
EPSData=EPSData.fillna('tmp')
,apply solution and last
df=df.repalce('tmp',np.nan)
非常感谢您的快速响应并介绍我合并。这对我来说对大多数股票都很有效。但我有一些股票的“EPSData”数据在某些季度缺失。因此,我做了一个小小的更改,并为tolerence(60天)添加了一个新参数,
tolerance=pd.Timedelta('60d')
。编辑的代码是:
df=pd.merge\u asof(a.sort\u index(),EPS.sort\u index(),left\u index=True,right\u index=True,tolerance=pd.Timedelta('60d')。sort\u index(升序=False)
。再次感谢您的帮助。@jezrael,也没有“NaN”值,数据类似于Q1和Q4,中间没有列。也许我必须找到一个更好的数据源。谢谢。
tolerance=pd.Timedelta('90d')
适用于所有股票,60的问题是一些公司会在一个月内报告每股收益。