在滞后的日期时间索引上合并多索引 pandas 数据帧

Merge multiindex pandas dataframes on a lagged datetimeindex

我有困难:

  1. 合并两个 pandas 多索引数据帧
  2. 在合并中将偏移量传递给日期时间索引

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 参数,但均未成功。

这涉及重建您的索引

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