【问题标题】:Concatenate two dataframes on datetimeindex of different format在不同格式的 datetimeindex 上连接两个数据帧
【发布时间】:2020-07-18 06:04:27
【问题描述】:

我有两个要连接的数据框。数据框ba 的子集。每个都有一个日期时间索引,a 是 YYYY-MM-DD 格式,b 是月末 YYYY-MM-DD 格式。

有很多方法(使用pd.merge/join/concat 的某种方式)通过格式化或以其他方式修改索引以匹配,返回两者的交集,但我需要生成的 df 包含交集数据框a 的索引。

下面的示例数据:

a

date    ret
2006-03-24  -0.013630799008283678
2006-03-27  -0.007940256570502124
2006-03-28  -0.0014077900025659673
2006-03-29  0.00561930769215746
2006-03-30  0.01827696914620336
2006-03-31  0.0038897200398240184
2006-04-03  -0.0022862378499624025
2006-04-04  0.011605546120307841
2006-04-05  0.018826194747782576
2006-04-06  0.0037673174750787464
2006-04-07  -0.009780029053639616
2006-04-10  0.005346415051967202

b

date    ret
2006-04-30  0.09429241029317115
2006-07-31  0.04774776287321525
2006-10-31  0.06057447262257265
2007-01-31  -0.02304839543629089
2007-02-28  0.022269124015597108

结果集(如上所示)将是:

date         ret
2006-04-03  -0.0022862378499624025
2006-04-04  0.011605546120307841
2006-04-05  0.018826194747782576
2006-04-06  0.0037673174750787464
2006-04-07  -0.009780029053639616
2006-04-10  0.005346415051967202

我的最终目标是确定 a 中的日期,这些日期在第二个数据框 b 中的月/年组合中。如果除了合并/加入/连接之外还有更好的方法来解决这个问题,我会全力以赴。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    您可以通过DatetimeIndex.to_periodDatetimeIndex 转换为月份,然后merge

    a['per'] = a.index.to_period('m')
    b['per'] = b.index.to_period('m')
    
    df1 = a.reset_index().merge(b[['per']], on='per')
    print (df1)
            date       ret      per
    0 2006-04-03 -0.002286  2006-04
    1 2006-04-04  0.011606  2006-04
    2 2006-04-05  0.018826  2006-04
    3 2006-04-06  0.003767  2006-04
    4 2006-04-07 -0.009780  2006-04
    5 2006-04-10  0.005346  2006-04
    

    Index.isinboolean indexing 的另一个想法:

    df2 = a[a.index.to_period('m').isin(b.index.to_period('m'))]
    print (df2)
                     ret
    date                
    2006-04-03 -0.002286
    2006-04-04  0.011606
    2006-04-05  0.018826
    2006-04-06  0.003767
    2006-04-07 -0.009780
    2006-04-10  0.005346
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2016-09-16
      • 2020-09-02
      • 2019-05-20
      • 1970-01-01
      相关资源
      最近更新 更多