在滞后的datetimeindex上合并多索引pandas数据帧

时间:2018-03-21 02:21:24

标签: pandas dataframe merge multi-index datetimeoffset

我遇到了困难:

  1. 合并两个pandas multiindex数据帧
  2. 将偏移传递给合并中的datetimeindex
  3. DF1:

    date        ID   Attr_1
    12/31/2010  13   A
                 9   B
                 1   C
    1/31/2011   13   D
                 9   E
                 1   F
    

    DF2:

    date        ID   Attr_2
    12/31/2010  13  -0.124409
                 9   0.555959
                 1  -0.705634
    1/31/2011   13   0.471078
                 9   0.276006
                 1  -0.468463
    

    一个月的滞后Attr_2应合并到df1。期望的输出:

    date        ID   Attr_1  Attr_2
    12/31/2010  13   A       nan
                 9   B       nan
                 1   C       nan
    1/31/2011   13   D      -0.124409             
                 9   E       0.555959
                 1   F      -0.705634
    

    我想用:

    pd.merge(df1, df2['Attr_2'], left_on = ['date', 'ID'], 
             right_on = [df2.index.date - pd.DateOffset(months = 1), 'ID'],
             how='left')
    

    我无法加入' date'因为它是两个dfs中的索引。我也不能像我一样减去df2 right_on的偏移量。

    我尝试在两个dfs中重置索引失败,然后将偏移量应用于right_on参数。

1 个答案:

答案 0 :(得分:0)

这涉及重建你的指数

df1.index = pd.MultiIndex.from_tuples([(pd.to_datetime(x[0]), x[1]) for x in df1.index])
df2.index = pd.MultiIndex.from_tuples([(pd.to_datetime(x[0])+ pd.DateOffset(months = 1), x[1]) for x in df2.index])

df1.join(df2)
Out[413]: 
              Attr_1    Attr_2
2010-12-31 13      A       NaN
           9       B       NaN
           1       C       NaN
2011-01-31 13      D -0.124409
           9       E  0.555959
           1       F -0.705634