【问题标题】:How do you combine two dataframes with timestamp indexes, overwriting the first and not duplicating rows?如何将两个数据帧与时间戳索引结合起来,覆盖第一行而不是重复行?
【发布时间】:2021-07-23 03:35:15
【问题描述】:

我有两个数据框,都带有时间戳索引。它们具有相似的列(第二个数据框缺少两列)。第二个数据帧也定期使用来自某些 API 的新数据每秒重新创建。如何使用第二个(或 API)中的信息不断更新第一个数据帧?

第一个数据框如下所示:

                           Open        High  ...          MA        EMA
2021-04-29 09:31:00  583.473999  583.473999  ...         NaN        NaN
2021-04-29 09:32:00  584.304932  585.394850  ...  584.349534 583.983949

第二个是这样的:

                        Open     High      Low    Close
2021-04-29 09:33:00  578.107  579.412  577.942  579.251

我已经尝试过 joinappendconcatcombine_firstupdate,都包裹在一些 asyncio 循环中,但其中任何一个都没有成功。它们要么根本不更新第一个数据帧,要么不覆盖相同的索引。

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    您可以pd.concat(df1, df2) 数据帧,然后使用参数keep='last' 运行drop_duplicates,如this answer. 中所述

    【讨论】:

    • drop_duplicates 忽略索引,只有检查列的选项。有什么方法可以做到这一点而不必将索引复制到列?
    • 试试这个:连接后,设置df1 = df1[~df1.index.duplicated(keep='first')]
    • 这导致数据框保留该索引的第一个值,这并不理想,因为连接/追加的点是用最新的数据覆盖。我已经决定将索引复制到一列并使用您的第一个解决方案,因为安定是幸福的关键。
    • 哈哈,这就是精神!很抱歉,它不是即插即用的。祝你有美好的一天!
    猜你喜欢
    • 2021-08-21
    • 2012-08-18
    • 2014-08-09
    • 1970-01-01
    • 2014-12-09
    • 2021-07-01
    • 1970-01-01
    • 2020-09-13
    • 2015-06-18
    相关资源
    最近更新 更多