【问题标题】:Combine two Dataframe timestamps based on an I.D field基于 I.D 字段组合两个 Dataframe 时间戳
【发布时间】:2019-02-27 22:37:21
【问题描述】:

我正在尝试找出一种方法,可以根据几个因素将 pandas/python 中的两个 dfs 合并为一个。

  1. 两个 dfs 中都有一个 i.d 字段
  2. 每个 df 都有一个时间戳,df_1 可以有一个或多个与一个 i.d 关联的时间戳
  3. df_2 只有一个与 I.D 关联的时间戳
  4. df_2 时间戳总是与 df_1 中的时间戳相比最早或第一个时间戳

我想合并两个数据帧,其中 df_2 时间戳是列中的第一个时间戳,而 df_1 的每个后续时间戳都在其后。

所以输出看起来像

I.D                  |            Timestamp
E4242                            earliest_timestamp from df_2
E4242                            next_timestamp from df_1
E4242                            next_timestamp from df_1

感谢收看!

【问题讨论】:

    标签: python pandas dataframe merge concatenation


    【解决方案1】:

    如果 df2 每个 ID 只包含一个日期始终是真的,并且该日期始终是该 ID 的最早日期,您是否可以简单地连接 df1 和 df2,然后按 ID 和时间戳排序?例如:

    # Generate example data
    df1 = pd.DataFrame({'id': [1, 1, 2, 3, 3, 3], 
                        'timestamp': pd.to_datetime(['2019-01-01', 
                                                     '2019-01-02', 
                                                     '2019-01-15', 
                                                     '2019-01-17', 
                                                     '2019-02-01', 
                                                     '2019-02-03'])})
    df2 = pd.DataFrame({'id': [1, 2, 3], 
                        'timestamp': pd.to_datetime(['1959-06-01', 
                                                     '1989-12-01', 
                                                     '1999-01-25'])})
    
    df = pd.concat([df1, df2])
    df = df.sort_values(by=['id', 'timestamp']).reset_index(drop=True)
    df
    
       id  timestamp
    0   1 1959-06-01
    1   1 2019-01-01
    2   1 2019-01-02
    3   2 1989-12-01
    4   2 2019-01-15
    5   3 1999-01-25
    6   3 2019-01-17
    7   3 2019-02-01
    8   3 2019-02-03
    

    【讨论】:

    • 谢谢! - 忽略索引有什么作用?我看到它忽略了每个记录的原始索引 # 但如果没有将其添加为参数会发生什么? @Peter Leimbigler
    • @Chris90, ignore_index=True 丢弃df1df2 的默认整数索引,并为生成的df3 提供它自己的唯一值整数索引。但是,如果我们对reset_index进行排序后,则无需忽略concat中的索引;我会编辑我的答案!
    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 2023-01-22
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多