首页 文章

在几天之内按日期合并2个Pandas数据帧?

提问于
浏览
1

所以,我有两个我创建的pandas数据帧并从在线数据中清除,我试图根据它们的日期合并它们,这些都是按月计算的 . 但是,第一个数据集的月份是在该月的最后一天,第二个数据集是否基于该月的第一天 .

# data1
0    1987-01-01  63.752
1    1987-02-01  64.152
2    1987-03-01  64.488
3    1987-04-01  64.995

# data2
0   1987-01-31  1115.10
1   1987-02-30  1095.63
2   1987-03-30  1036.19
3   1987-04-30  1057.08

如果我每天都有一些缺失的数据,我通常会将它们合并为类似的东西

data3 = pd.merge(left=data1, left_on='Date', right=data2, right_on='Date')

但在这种情况下,它们永远不会匹配,即使它们都是相似的日期 .

我将如何“告诉”Pandas根据相隔几天的日期合并数据集,并将每个数据命名为“月 - 年”?我不知道从哪里开始,并会欣赏任何输入 .

2 回答

  • 2

    IIUC,您想在最近的日期合并吗?这就是merge_asof的用途

    如果日期尚未转换为日期时间,请将其转换为如此

    data1.date = pd.to_datetime(data1.date)
    data2.date = pd.to_datetime(data2.date)
    

    现在完成合并

    pd.merge_asof(data1,data2,on='date',direction='nearest')
    
           date  value_x  value_y
    0 1987-01-01   63.752  1115.10
    1 1987-02-01   64.152  1036.19
    2 1987-03-01   64.488  1057.08
    3 1987-04-01   64.995  1057.08
    
  • 1

    如果您的日期列名为 date ,则可以按以下方式执行操作:

    data1['date'] = pd.to_datetime(data1['date'])
    data2['date'] = pd.to_datetime(data2['date'])
    
    data1['month'] = data1['date'].dt.month
    data1['year'] = data1['date'].dt.year
    
    data2['month'] = data2['date'].dt.month
    data2['year'] = data2['date'].dt.year
    

    哪会导致这样的事情:

    >>> data1
            date   value  month  year
    0                                
    0 1987-01-01  63.752      1  1987
    1 1987-02-01  64.152      2  1987
    2 1987-03-01  64.488      3  1987
    3 1987-04-01  64.995      4  1987
    >>> data2
            date    value  month  year
    0                                 
    0 1987-01-01  1115.10      1  1987
    1 1987-01-02  1095.63      1  1987
    2 1987-02-01  1036.19      2  1987
    3 1987-02-28  1057.08      2  1987
    

    然后,您可以合并月份和年份:

    data3=data1.merge(data2, on=['month', 'year'])
    

相关问题