如何合并两个具有不同日期时间索引的pandas时间序列对象?

时间:2018-03-31 06:26:40

标签: python pandas

我有两个不相交的时间序列对象,例如

-ts1

 Date           Price
 2010-01-01     1800.0
 2010-01-04     1500.0
 2010-01-08     1600.0
 2010-01-09     1400.0
 Name: Price, dtype: float64

-ts2

 Date           Price
 2010-01-02     2000.0
 2010-01-03     2200.0
 2010-01-05     2010.0
 2010-01-07     2100.0
 2010-01-10     2110.0

如何将两者合并为一个应按日期排序的时间序列?喜欢

-ts3

 Date           Price
 2010-01-01     1800.0
 2010-01-02     2000.0
 2010-01-03     2200.0
 2010-01-04     1500.0
 2010-01-05     2010.0
 2010-01-07     2100.0
 2010-01-08     1600.0
 2010-01-09     1400.0
 2010-01-10     2110.0

2 个答案:

答案 0 :(得分:3)

使用pandas.concatDataFrame.append加入,然后使用Datedrop=True,最后使用参数df3 = pd.concat([df1, df2]).sort_values('Date').reset_index(drop=True) 的默认索引DataFrame.sort_values

df3 = df1.append(df2).sort_values('Date').reset_index(drop=True)

替代:

print (df3)
         Date   Price
0  2010-01-01  1800.0
1  2010-01-02  2000.0
2  2010-01-03  2200.0
3  2010-01-04  1500.0
4  2010-01-05  2010.0
5  2010-01-07  2100.0
6  2010-01-08  1600.0
7  2010-01-09  1400.0
8  2010-01-10  2110.0
s3= pd.concat([s1, s2]).sort_index()

编辑:

如果TimeSeries然后解决方案是简化:

https://raml.org/developers/raml-100-tutorial
https://raml.org/developers/raml-200-tutorial

答案 1 :(得分:2)

您可以将每个索引设置为'Date'并使用combine_first

ts1.set_index('Date').combine_first(ts2.set_index('Date')).reset_index()

        Date   Price
0 2010-01-01  1800.0
1 2010-01-02  2000.0
2 2010-01-03  2200.0
3 2010-01-04  1500.0
4 2010-01-05  2010.0
5 2010-01-07  2100.0
6 2010-01-08  1600.0
7 2010-01-09  1400.0
8 2010-01-10  2110.0

如果首先是系列赛,那么你可以简单地

ts1.combine_first(ts2)