根据I.D字段合并两个Dataframe时间戳

时间:2019-02-27 22:37:21

标签: python pandas dataframe merge concatenation

我试图基于两种因素,将熊猫/ python中的两个df组合为一个。

  1. 两个df中都存在一个i.d字段
  2. 每个df都有一个时间戳,df_1可以有一个或多个与i.d相关的时间戳。
  3. df_2只有一个与I.D相关的时间戳
  4. 与df_1中的时间戳相比,
  5. df_2时间戳将始终是最早的时间戳或第一个时间戳。

我想合并两个数据帧,其中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

感谢您的光临!

1 个答案:

答案 0 :(得分:0)

如果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