【问题标题】:Merge multiindex pandas dataframes on a lagged datetimeindex在滞后的 datetimeindex 上合并多索引 pandas 数据帧
【发布时间】:2018-08-30 00:40:33
【问题描述】:

我有困难:

  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')

我无法加入“日期”,因为它是两个 dfs 中的索引。我也不能像我所做的那样减去 df2 right_on 的偏移量。

我已尝试在两个 dfs 中重置索引但未成功,然后将偏移量应用于 right_on 参数。

【问题讨论】:

    标签: pandas dataframe merge multi-index datetimeoffset


    【解决方案1】:

    这涉及重建您的索引

    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
    

    【讨论】:

    • 有没有办法在合并/连接方法本身中更改 df2 的索引?原因是我不想修改原始 df2 索引,因为我会以不同的时间延迟多次调用它,即 12M、24M。
    • @akr24 你可以复制 df2 ,比如 df2_original =df2.copy(),然后为 df2 做任何你想做的事情 :-)
    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2018-11-30
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多