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

如何按月份分组取每月前3个日期均值并合并周度与月度DataFrame?

解决周度DataFrame与月度DataFrame合并并计算每月前三个日期均值的问题

我来帮你一步步实现这个需求,核心思路是先处理周度数据计算出每月前三个日期的均值,再和月度DataFrame合并,下面是具体的代码和步骤:

1. 准备数据并处理日期格式

首先我们需要把周度DataFrame的Date列转为datetime类型,这样才能方便提取月份信息,避免字符串处理的麻烦:

import pandas as pd

# 你的周度数据
weekly_df = pd.DataFrame({
    'Date': ['2020-01-01', '2020-01-08', '2020-01-16', '2020-01-24',
             '2020-02-01', '2020-02-08', '2020-02-16', '2020-02-24'],
    'Value': [2, 2, 2, 1, 1, 1, 1, 1]
})
# 转换日期格式
weekly_df['Date'] = pd.to_datetime(weekly_df['Date'])

2. 计算每月前三个日期的均值

我们先给周度数据添加一个Month列(月度周期类型),然后按月份分组,每个组内先按日期排序(确保取到的是每月最早的三个日期),再取前3行计算Value的均值:

# 添加月度分组列,用period类型保证和后续月度数据的匹配
weekly_df['Month'] = weekly_df['Date'].dt.to_period('M')

# 分组计算每月前3个日期的均值
monthly_first3_avg = weekly_df.groupby('Month').apply(
    lambda group: group.sort_values('Date').head(3)['Value'].mean()
).reset_index(name='Weekly_First3_Avg')

这里有个细节:即使你的原始数据日期已经是升序,我还是加上了sort_values('Date'),这样能避免数据乱序导致取错日期的问题,让代码更健壮。如果某个月份的日期不足3个,head(3)会自动取所有现有行计算均值,逻辑也符合需求。

3. 合并月度DataFrame

假设你的月度DataFrame是类似下面的结构,我们需要把它的Month列也转为period类型,保证和周度处理后的列类型一致,然后用merge完成合并:

# 示例月度DataFrame(替换成你实际的月度数据)
monthly_df = pd.DataFrame({
    'Month': ['2020-01', '2020-02'],
    'Monthly_Metric': [50, 60]
})
# 转换月度列的类型,和周度数据匹配
monthly_df['Month'] = pd.to_period('M')

# 合并两个DataFrame,这里用left join保证月度数据的所有行都保留
merged_df = pd.merge(monthly_df, monthly_first3_avg, on='Month', how='left')

运行后merged_df就是你需要的合并结果,包含月度数据和对应月份周度前三个日期的均值。

内容的提问来源于stack exchange,提问作者Alissa L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:13:09