объединить два фрейма данных, следуя определенному шаблону

#python #pandas #datetime #join #merge

#python #pandas #дата-время #Присоединиться #объединить

Вопрос:

У меня есть два df :

 date=pd.date_range(start = '8/1/2020 7:00:00', end ='8/1/2020 7:15:00',freq='min')
df1=pd.DataFrame({'date':date})
  

и

 df2=pd.DataFrame({'date':[dt.datetime(2020,8,1,7,0),dt.datetime(2020,8,1,7,6),dt.datetime(2020,8,1,7,12)],'count':[5,6,1]})
  

Я хочу объединить df2 в df1, следуя шаблону в df3 :

    date                     count
0  2020-01-08 07:00:00      5
1  2020-01-08 07:01:00      5
2  2020-01-08 07:02:00      5
3  2020-01-08 07:03:00      5
4  2020-01-08 07:04:00      5
5  2020-01-08 07:05:00      5
6  2020-01-08 07:06:00      6
7  2020-01-08 07:07:00      6
8  2020-01-08 07:08:00      6
9  2020-01-08 07:09:00      6
10 2020-01-08 07:10:00      6
11 2020-01-08 07:11:00      6
12 2020-01-08 07:12:00      1
13 2020-01-08 07:13:00      1
14 2020-01-08 07:14:00      1
15 2020-01-08 07:15:00      1
  

Есть ли у PANDAS функция для этого?

Спасибо!

Комментарии:

1. Это опечатка! Я изменяю это

Ответ №1:

 date=pd.date_range(start = '1/8/2020 7:00:00', end ='1/8/2020 7:15:00',freq='min')
df1=pd.DataFrame({'date':date})


df2=pd.DataFrame({'date':[dt.datetime(2020,1,8,7,0),dt.datetime(2020,1,8,7,6),dt.datetime(2020,1,8,7,12)],'count':[5,6,1]})
#I've corrected your input df2, months<-> days position

df3= df2.merge(df1,on='date',how='outer')
df3=df3.sort_values(by='date').ffill()
print(df3)
                  date  count
0  2020-01-08 07:00:00    5.0
3  2020-01-08 07:01:00    5.0
4  2020-01-08 07:02:00    5.0
5  2020-01-08 07:03:00    5.0
6  2020-01-08 07:04:00    5.0
7  2020-01-08 07:05:00    5.0
1  2020-01-08 07:06:00    6.0
8  2020-01-08 07:07:00    6.0
9  2020-01-08 07:08:00    6.0
10 2020-01-08 07:09:00    6.0
11 2020-01-08 07:10:00    6.0
12 2020-01-08 07:11:00    6.0
2  2020-01-08 07:12:00    1.0
13 2020-01-08 07:13:00    1.0
14 2020-01-08 07:14:00    1.0
15 2020-01-08 07:15:00    1.0
  

Ответ №2:

Запустите просто: pd.merge_asof(df1, df2, on='date')