如何按日期区间将季度DataFrame合并至日度DataFrame
日度数据与季度区间数据匹配实现方案
核心思路
利用pandas的merge_asof函数实现向前匹配,找到每条日度数据对应的最近(且不晚于该日)的季度数据,完成字段合并。
具体步骤
统一日期格式
先将两个DataFrame的Date字段转换为可识别的日期类型,注意清理日度数据中日期字符串的空格(比如1 / 30 / 2021需转为1/30/2021)。排序季度数据
merge_asof要求用于匹配的右侧DataFrame(季度数据DF1)必须按Date字段排序,否则无法正确匹配。执行匹配合并
通过merge_asof指定匹配字段和方向,将季度数据的字段合并到日度数据中。
完整代码示例
import pandas as pd # 构造示例数据(实际场景可替换为pd.read_csv等读取方式) df = pd.DataFrame({ 'Date': ['1 / 30 / 2021', '1 / 31 / 2021', '2 / 1 / 2021', '5 / 1 / 2021', '5 / 2 / 2021'], 'Num of people': [45, 35, 25, 20, 15] }) df1 = pd.DataFrame({ 'Date': ['1/29/2021', '4/30/2021', '7/29/2021', '1/29/2022', '5/1/2022', '7/30/2022'], 'Computer Sale': [1, 2, 3, 4, 5, 6], 'In Person Sales': [2, 4, 6, 8, 10, 12], 'Net Sales': [3, 6, 9, 12, 15, 18] }) # 清理日度数据的日期空格并转换为datetime类型 df['Date'] = pd.to_datetime(df['Date'].str.replace(' ', '')) # 转换季度数据的日期类型 df1['Date'] = pd.to_datetime(df1['Date']) # 对季度数据按日期排序(merge_asof要求右表必须排序) df1_sorted = df1.sort_values('Date') # 执行向前匹配合并:找到每条日度数据对应的最近且不晚于该日的季度数据 result = pd.merge_asof( df.sort_values('Date'), # 左表也需排序,merge_asof要求 df1_sorted, on='Date', direction='backward' # backward表示匹配小于等于左表日期的最大右表日期 ) # 按需求格式输出结果 print(result.to_string(date_format='%m/%d/%Y'))
结果说明
运行代码后会得到需求中的合并结果:每条日度数据会匹配到其所在季度区间对应的季度销售字段,例如2021年5月1日的日度数据会匹配到2021年4月30日的季度数据。
内容的提问来源于stack exchange,提问作者svlad
相关产品推荐
相关产品推荐

