如何连接两个时间序列数据帧,使结果数据帧具有所有唯一日期,而没有常见的重复日期



我有两个时间序列数据帧:

df1 = pd.DataFrame({'Date': [pd.to_datetime('1980-01-03'), pd.to_datetime('1980-01-04'),
pd.to_datetime('1980-01-05'), pd.to_datetime('1980-01-06'),
pd.to_datetime('1980-01-07'), pd.to_datetime('1980-01-8')],
'Temp': [13.5,10,14,12,10,9]})
df1

Date    Temp
0   1980-01-03  13.5
1   1980-01-04  10.0
2   1980-01-05  14.0
3   1980-01-06  12.0
4   1980-01-07  10.0
5   1980-01-08  9.0

df2 = pd.DataFrame({'Date': [pd.to_datetime('1980-01-01'), pd.to_datetime('1980-01-02'),
pd.to_datetime('1980-01-03'), pd.to_datetime('1980-01-04')], 
'Temp': [10,17,13.5,10]})
df2
Date    Temp
0   1980-01-01  10.0
1   1980-01-02  17.0
2   1980-01-03  13.5
3   1980-01-04  10.0

现在我的任务是基于日期连接这些数据帧,使结果数据帧具有两个数据帧唯一的日期,并且也具有单个条目的共同(存在于两个数据帧中)日期,并按适当的日期顺序排列。

为了达到这个效果,我尝试了以下操作:

df = pd.concat([df1, df2])
df.reset_index().drop(columns = ['index'], axis = 1)
Date    Temp
0   1980-01-03  13.5
1   1980-01-04  10.0
2   1980-01-05  14.0
3   1980-01-06  12.0
4   1980-01-07  10.0
5   1980-01-08  9.0
6   1980-01-01  10.0
7   1980-01-02  17.0
8   1980-01-03  13.5
9   1980-01-04  

但这是不正确的结果。我想要得到的是:

Date    Temp
0   1980-01-01  10.0
1   1980-01-02  17.0
2   1980-01-03  13.5
3   1980-01-04  10.0
4   1980-01-05  14.0
5   1980-01-06  12.0
6   1980-01-07  10.0
7   1980-01-08  9.0

我能做什么?也许pd.concat()不是要走的路?

一个可能的解决方案:

pd.merge(df1, df2, how="outer").sort_values(by="Date").reset_index(drop=True)

输出:

Date  Temp
0 1980-01-01  10.0
1 1980-01-02  17.0
2 1980-01-03  13.5
3 1980-01-04  10.0
4 1980-01-05  14.0
5 1980-01-06  12.0
6 1980-01-07  10.0
7 1980-01-08   9.0

最新更新