猿问

合并具有不同日期的数据框?

我想将一个单独的数据框 (df2) 与主数据框 (df1) 合并,但是如果对于给定的行,df1 中的日期在 df2 中不存在,则在 df1 中的基础日期之前搜索最近的日期。


我尝试使用 pd.merge,但它会删除日期不匹配的行,并且只保留在两个 df 中匹配的行。


df1 = [['2007-01-01','A'],

       ['2007-01-02','B'],

       ['2007-01-03','C'],

       ['2007-01-04','B'],

       ['2007-01-06','C']]


df2 = [['2007-01-01','B',3],

       ['2007-01-02','A',4],

       ['2007-01-03','B',5],

       ['2007-01-06','C',3]]


df1 = pd.DataFrame(df1)

df2 = pd.DataFrame(df2)

df1[0] = pd.to_datetime(df1[0])

df2[0] = pd.to_datetime(df2[0])

当前 df1 | pd.merge():


    0           1   2

0   2007-01-06  C   3  

只获取两个 df 之间的确切日期,它不考虑最近日期的值。


预期 df1:


    0           1   2

0   2007-01-01  A   NaN

1   2007-01-02  B   3

2   2007-01-03  C   NaN

3   2007-01-04  B   3

4   2007-01-06  C   3

获取 NaN,因为 df2 中该日期当天或之前不存在数据。对于索引行 1,它获取前一天之前的数据,而索引行 4,它恰好获取当天的数据。


森林海
浏览 172回答 2
2回答

呼唤远方

使用检查您的输出 merge_asofpd.merge_asof(df1,df2,on=0,by=1,allow_exact_matches=True)Out[15]:            0  1    20 2007-01-01  A  NaN1 2007-01-02  B  3.02 2007-01-03  C  NaN3 2007-01-04  B  5.0 # here should be 5 since 5 ' date is more close. also df2 have two B 4 2007-01-06  C  3.0
随时随地看视频慕课网APP

相关分类

Python
我要回答