python - 如果日期位于当前索引和上一个索引之间,则将值添加到索引为 'datetime' 的数据帧的当前行

标签 python python-3.x pandas

我有两个数据帧 stockDataEPSdata 如下。
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
......

EPSData将为

           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
.....

这里两个数据帧都按日期索引。

最佳答案

使用merge_asofDataFrame.sort_index :

df = (pd.merge_asof(stockData.sort_index(), 
                    EPSData.sort_index(), 
                    left_index=True, 
                    right_index=True)
        .sort_index(ascending=False))
print (df)
                 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
2016-06-30   91.333252            NaN
2016-03-31  103.495514            NaN
2015-12-31   99.414101            NaN
2015-09-30  103.730179            NaN

关于python - 如果日期位于当前索引和上一个索引之间,则将值添加到索引为 'datetime' 的数据帧的当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55472020/

相关文章:

python - 如何使用切片运算符更改嵌套列表中的元素

python - 在 DBSCAN 中使用 Mahalanobis 等替代距离度量

python - 如何在 Windows 中运行这个适用于 Linux 的 python 脚本?

Python:pprint的模块错误,打印没有错误

python - PyQt4 中的多个类

python - 如何在windows平台上设置matlab的python版本?

python - postgresql 中的动态数据

python - 组合 DataFrame 中的行并将值添加为列

python - SettingWithCopyWarning 使用 Pandas apply

python - 使用 Pandas 比较列值并根据比较列中的值创建列?