两个时间序列(每个具有唯一的DateTimeIndex)和ffilling的有序合并?

时间:2016-01-15 03:15:40

标签: python pandas dataframe

time                       price
2015-11-18 00:00:00.000    42.02
2015-11-18 00:00:00.021    42.01
2015-11-18 00:00:00.126    42.01
2015-11-18 00:00:00.127    42.02
Name: price, dtype: float64

time                       price
2015-11-18 00:00:00.000    106.82
2015-11-18 00:00:00.020    106.82
2015-11-18 00:00:00.021    106.82
2015-11-18 00:00:00.207    106.82
2015-11-18 00:00:00.325    106.82
Name: price, dtype: float64

我想将这两个独特的DataFrames(让我们说一个是stock1,一个是stock2)合并到一个多索引(由stock1和stock2)DataFrame中,如下所示:

                            STOCK1          STOCK2
time                       price
2015-11-18 00:00:00.000    106.82           42.02
2015-11-18 00:00:00.126    106.82           42.01
2015-11-18 00:00:00.127    106.82           42.02
2015-11-18 00:00:00.020    106.82           42.02
2015-11-18 00:00:00.021    106.82           42.01
2015-11-18 00:00:00.021    106.82           42.01   
2015-11-18 00:00:00.207    106.82           42.01   
2015-11-18 00:00:00.325    106.82           42.01

当我尝试首先制作多指数时,我得到了

  

ValueError:无法从重复轴重新索引

尝试了ordered_merge但是没有得到正确的结果。

首先通过联盟重新索引Stock1和Stock2然后对它们进行多重索引是否有意义?实现结果的最佳流程是什么?

1 个答案:

答案 0 :(得分:0)

当我读到它时,我丢失了日期信息,但这应该有效

In [37]: df = pd.concat([s1, s2], keys=['stock1', 'stock2'], axis=1).fillna(method='ffill')

In [38]: df.columns = pd.MultiIndex.from_product(['price', df.columns])

In [39]: df
Out[39]:
              price
             stock1  stock2
00:00:00.000  42.02  106.82
00:00:00.020  42.02  106.82
00:00:00.021  42.01  106.82
00:00:00.126  42.01  106.82
00:00:00.127  42.02  106.82
00:00:00.207  42.02  106.82
00:00:00.325  42.02  106.82

concat这里基本上是索引标签的外连接/联合。 由于它们共享最外层,我的列级别与输入的方式相反。如果你真的想要它,就像在你的例子中一样,将最后一个翻转到pd.MultiIndex.from_product([df.columns, 'price'])