如何在Pandas中加入年份和月份的2个数据帧?

use*_*101 2 python merge date dataframe pandas

我有2个数据框,我希望在没有创建额外列的情况下,根据月份和年份加入它们:

例如:

df1:

date_1      value_1
2017-1-15    20
2017-1-31    30
2016-2-15    20
Run Code Online (Sandbox Code Playgroud)

DF2:

date_2      value_2
2017-1-1    30
Run Code Online (Sandbox Code Playgroud)

然后得到如下结果,即以月和年为基础合并.

date_1      value_1 value_2
2017-1-15    20     30
2017-1-31    30     30
2016-2-15    20
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 7

这是一个基本但有效的解决方案:

res = pd.merge(df1.assign(grouper=df1['date_1'].dt.to_period('M')),
               df2.assign(grouper=df2['date_2'].dt.to_period('M')),
               how='left', on='grouper')

print(res)

      date_1  value_1 grouper     date_2  value_2
0 2017-01-15       20 2017-01 2017-01-01     30.0
1 2017-01-31       30 2017-01 2017-01-01     30.0
2 2016-02-15       20 2016-02        NaT      NaN
Run Code Online (Sandbox Code Playgroud)

然后,您可以删除不需要的列:

res = res[['date_1', 'value_1', 'value_2']]
Run Code Online (Sandbox Code Playgroud)