如何基于某些逻辑加入2个数据帧

use*_*101 2 python join left-join dataframe pandas

我有一个带有以下双周数据的数据框

date            value
15-06-2012      20
30-06-2012      30
Run Code Online (Sandbox Code Playgroud)

我需要加入另一个具有以下数据的数据框:

   date            cost
    2-05-2011       5
    3-04-2012       80
    2-06-2012       10
    3-06-2012       10
    4-06-2012       30
    5-06-2012       20
    10-06-2012      10
    15-06-2012      10
    18-06-2012      30
    20-06-2012      20
    21-06-2012      30
    22-06-2012      30
    29-06-2012      20
    29-10-2012      30
Run Code Online (Sandbox Code Playgroud)

我需要以这样一种方式加入2个数据帧,从另一个数据帧,我得到平均成本在2012年6月1日至15日之间,以填补15-06-2012成本,同样在30-06-2012成本,我得到平均值16 -06-2012至30-06-2012并获得以下结果

 date            value cost
15-06-2012      20     15  which is (10+10+30+20+10+10)/6
30-06-2012      30     26  which is (30+20+30+30+20)/5
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 5

更改列日期的日期时间,然后我们使用 merge_asof

#df.date=pd.to_datetime(df.date,dayfirst=True)
#df1.date=pd.to_datetime(df1.date,dayfirst=True)
df['keepkey']=df.date
mergedf=pd.merge_asof(df1,df,on='date',direction ='forward')
mergedf.groupby('keepkey',as_index=False).mean()
Out[373]: 
     keepkey  cost  value
0 2012-06-15    15     20
1 2012-06-30    26     30
Run Code Online (Sandbox Code Playgroud)

更新:

df['keepkey']=df.date
df['key']=df.date.dt.strftime('%Y-%m')
df1['key']=df1.date.dt.strftime('%Y-%m')
mergedf=pd.merge_asof(df1,df,on='date',by='key',direction ='forward')
mergedf.groupby('keepkey',as_index=False).mean()
Out[417]: 
     keepkey  cost  key  value
0 2012-06-15    15    6   20.0
1 2012-06-30    26    6   30.0
Run Code Online (Sandbox Code Playgroud)