如何将两个数据框与日期索引组合在一起,第一个数据框的当前日期索引应获取第二个数据框的下一个索引的值

时间:2019-04-24 14:10:02

标签: python-3.x pandas

我有两个带有日期索引的数据帧df1df2,如何将两个数据帧组合在一起,使得df1的当前日期索引应获取下一个索引的值df2中的。

import pandas as pd
from datetime import datetime, timedelta
a=pd.date_range(datetime(2018,12,31)-timedelta(weeks=54),datetime(2018,12,31),freq='Q')
b =[100,200,300,400,500]
df1 = pd.DataFrame({'col1':b},index=a)
a=pd.date_range(datetime(2018,12,31)-timedelta(weeks=90),datetime(2018,12,31),freq='Q')
c= [-1,0,1,2,3,4,5]
df2 = pd.DataFrame({'col2':c},index=a)

>>df1 
            col1
2017-12-31   100
2018-03-31   200
2018-06-30   300
2018-09-30   400
2018-12-31   500

>>df2
            col2
2017-06-30    -1
2017-09-30     0
2017-12-31     1
2018-03-31     2
2018-06-30     3
2018-09-30     4
2018-12-31     5

有什么办法得到像下面这样的输出

>>df1
            col1  col2
2017-12-31   100     2
2018-03-31   200     3
2018-06-30   300     4
2018-09-30   400     5
2018-12-31   500   NaN

我尝试合并,但是它将匹配索引中相同索引的取值

2 个答案:

答案 0 :(得分:2)

IIUC

pd.concat([df1,df2.shift(-1)],axis=1)
Out[219]: 
            col1  col2
2017-12-31   100   2.0
2018-03-31   200   3.0
2018-06-30   300   4.0
2018-09-30   400   5.0
2018-12-31   500   NaN

答案 1 :(得分:1)

先使用join,然后再使用shift

df = df1.join(df2)
df.col2 = df.col2.shift(-1)

df

            col1  col2
2017-12-31   100   2.0
2018-03-31   200   3.0
2018-06-30   300   4.0
2018-09-30   400   5.0
2018-12-31   500   NaN