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

如何在Pandas中实现从固定日期到动态结束日期的数据分组与聚合

Pandas实现MTD/YTD聚合的高效方案

前置预处理

所有场景都需要先完成日期格式转换与排序,保证时间顺序正确:

import pandas as pd

# 转换日期格式,确保按时间升序排列
df['created_at'] = pd.to_datetime(df['created_at'], format='%d-%m-%Y')
df = df.sort_values('created_at').reset_index(drop=True)
# 提取年、月字段方便后续分组
df['year'] = df['created_at'].dt.year
df['month'] = df['created_at'].dt.month

场景1:求和类MTD/YTD计算

先按日期聚合单日总和,再通过分组累加即可得到对应累计值:

# 聚合得到每个日期的单日value总和
daily_sum = df.groupby(['year', 'month', 'created_at'], as_index=False)['value'].sum()
# 计算当月累计求和(MTD)
daily_sum['Month to date sum'] = daily_sum.groupby(['year', 'month'])['value'].cumsum()
# 计算当年累计求和(YTD)
daily_sum['Year to date sum'] = daily_sum.groupby(['year'])['value'].cumsum()

# 整理输出格式
sum_result = daily_sum.rename(columns={'created_at': 'Date'})[['Date', 'Month to date sum', 'Year to date sum']]
sum_result['Date'] = sum_result['Date'].dt.strftime('%d-%m-%Y')

输出结果和给出的预期完全一致。

场景2:唯一值计数类MTD/YTD计算

这里采用首次出现标记法实现,全程使用向量化操作,无循环、无列表堆叠,内存占用极低,适配百万级以上大数据量场景:

# 标记每个value在当前月份是否为第一次出现,首次出现为True,重复出现为False
df['is_new_month'] = ~df.duplicated(subset=['year', 'month', 'value'], keep='first')
# 标记每个value在当前年份是否为第一次出现
df['is_new_year'] = ~df.duplicated(subset=['year', 'value'], keep='first')

# 聚合得到每个日期的月新增唯一值、年新增唯一值数量
daily_unique = df.groupby(['year', 'month', 'created_at'], as_index=False).agg(
    month_add=('is_new_month', 'sum'),
    year_add=('is_new_year', 'sum')
)

# 累加新增值得到累计唯一值计数
daily_unique['Month to date unique'] = daily_unique.groupby(['year', 'month'])['month_add'].cumsum()
daily_unique['Year to date unique'] = daily_unique.groupby(['year'])['year_add'].cumsum()

# 整理输出格式
unique_result = daily_unique.rename(columns={'created_at': 'Date'})[['Date', 'Month to date unique', 'Year to date unique']]
unique_result['Date'] = unique_result['Date'].dt.strftime('%d-%m-%Y')

该方案的核心逻辑是:唯一值计数的累计值等价于累计新增的首次出现的唯一值数量,不需要存储历史所有唯一值列表,仅通过标记和累加即可完成计算,性能远高于传统窗口拼接或循环方案。


内容的提问来源于stack exchange,提问作者Piotr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:18:00