首页 > 解决方案 > 熊猫合并两个数据框并在日期之间加入日期

问题描述

有一个很有趣的案例。

有一个基于低粒度数据(2s)的列,如下所示df_1time

2018-08-31 22:59:47.980000+00:00    41.77   
2018-08-31 22:59:49.979000+00:00    42.76   
2018-08-31 22:59:51.979000+00:00    40.86   
2018-08-31 22:59:53.979000+00:00    41.83   
2018-08-31 22:59:55.979000+00:00    41.73   
2018-08-31 22:59:57.979000+00:00    42.71

df_2此数据和time列的标签也按小时计算:

2018-08-31 22:00:00 0.0
2018-08-31 23:00:00 1.0
2018-09-01 00:00:00 0.0
2018-09-01 01:00:00 1.0
2018-09-01 02:00:00 0.0

我想df_1df_2df_1 的时间合并在每两个连续的时间行df_2之间(在给出标签的一小时之间)。如果我在df_2(likestartTimeendTime) 中有两个时间列,我会使用pandasql它的机会:

import pandasql 

sqlcode = '''
select *
from df_1
inner join df_2 on df_1.time >= df_2.startTime and df_1.time <= df_2.endTime
'''

newdf = ps.sqldf(sqlcode,locals())

但在这种情况下,我只有一列。有什么办法可以在 Pandas 中解决这个问题?

标签: pythonpandasdatetimemergetimedelta

解决方案


这是pd.merge_asof问题,我在 df2 中创建了一个 keydat 日期对偶,以显示我们从 df2 合并的日期

#df1.Date=pd.to_datetime(df1.Date)
#df2.Date=pd.to_datetime(df2.Date)
yourdf=pd.merge_asof(df1,df2.assign(keydate=df2.Date),on='Date',direction='forward')
yourdf
                     Date         ...                     keydate
0 2018-08-31 22:59:47.980         ...         2018-08-31 23:00:00
1 2018-08-31 22:59:49.979         ...         2018-08-31 23:00:00
2 2018-08-31 22:59:51.979         ...         2018-08-31 23:00:00
3 2018-08-31 22:59:53.979         ...         2018-08-31 23:00:00
4 2018-08-31 22:59:55.979         ...         2018-08-31 23:00:00
5 2018-08-31 22:59:57.979         ...         2018-08-31 23:00:00
[6 rows x 4 columns]

推荐阅读