【问题标题】:Join two dataframes based on different dates根据不同的日期加入两个数据框
【发布时间】:2020-07-07 11:14:55
【问题描述】:

我有两个数据框。一个是苹果股票的工作日和股价。另一个,持有每股收益的季度数据。但是,日期列表不同,但按时间顺序排列。我想将eps 框架的时序值添加到现有的价格数据框架中。

    date    close
0   2020-07-06  373.85
1   2020-07-02  364.11
2   2020-07-01  364.11
3   2020-06-30  364.80
4   2020-06-29  361.78
...     ...     ...
9969    1980-12-18  0.48
9970    1980-12-17  0.46
9971    1980-12-16  0.45
9972    1980-12-15  0.49
9973    1980-12-12  0.51

每股收益:

    date        eps
0   2020-03-28  2.59
1   2019-12-28  5.04
2   2019-09-28  3.05
3   2019-06-29  2.22
4   2019-03-30  2.48
...     ...     ...
71  2002-06-29  0.09
72  2002-03-30  0.11
73  2001-12-29  0.11
74  2001-09-29  -0.11
75  2001-06-30  0.17

所以我的结果应该是这样的:

            close   eps
date
...         
2020-04-01  240.91  NaN
2020-03-31  254.29  NaN
2020-03-30  254.81  NaN
2020-03-28     NaN  2.59
2020-03-27  247.74  NaN
2020-03-26  258.44  NaN

注意值“2020-03-28”,以前只存在于 eps 框架中,现在整齐地放置在它所属的位置。

但是,我无法让它工作。首先,我认为必须有一个简单的 join、merge 或 concat 具有此功能,并且按时间顺序排列正确的数据,但到目前为止,我找不到它。

我的失败尝试:

  1. pd.concat([df, eps], axis=0, sort=True) - 只是附加两个数据帧
  2. pd.merge_ordered(df, eps, fill_method="ffill", left_by="date") - 简单地忽略 eps 日期

我们的目标是用两张图绘制这个 Dataframe - 一张是股票价格,另一张是 eps 数据。

【问题讨论】:

    标签: python pandas dataframe date


    【解决方案1】:

    我认为你需要:

    pd.concat([df.set_index('date'), eps.set_index('date')]).sort_index(ascending=False)
    

    【讨论】:

    • 不完全。出于某种原因,我的新数据框未按索引排序。我刚刚将.sort_index() 附加到我的新数据框
    【解决方案2】:

    之后您可以简单地按索引对连接的数据帧进行排序。感谢@jezrael 的提示!

    pd.concat([df.set_index('date'), eps.set_index('date')]).sort_index(ascending=False)

    由于某种原因,concat 函数中的 sort 参数没有对我的数据帧进行排序。

    【讨论】:

    • 对我来说,如果我将 sort_index(accending=False) 更改为 sort_index(accending=True)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2021-04-26
    • 2016-11-09
    • 2020-06-25
    • 2016-09-28
    • 2021-11-12
    相关资源
    最近更新 更多