You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按日期区间将季度DataFrame合并至日度DataFrame

日度数据与季度区间数据匹配实现方案

核心思路

利用pandas的merge_asof函数实现向前匹配,找到每条日度数据对应的最近(且不晚于该日)的季度数据,完成字段合并。

具体步骤

  1. 统一日期格式
    先将两个DataFrame的Date字段转换为可识别的日期类型,注意清理日度数据中日期字符串的空格(比如1 / 30 / 2021需转为1/30/2021)。

  2. 排序季度数据
    merge_asof要求用于匹配的右侧DataFrame(季度数据DF1)必须按Date字段排序,否则无法正确匹配。

  3. 执行匹配合并
    通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:25:16