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

如何在pandas中按每月最后日期分组并对指定字段进行聚合计算

原有代码的问题在于分组维度错误:你按date(具体日期)分组后,每个分组内的date值完全一致,g['date'].max()等于当前分组的date本身,相当于没有做任何有效筛选。

方案1:先过滤非月末目标日期数据,再聚合(效率更高,符合你的预期思路)

首先做必要预处理,确保date列为datetime类型:

import pandas as pd
df['date'] = pd.to_datetime(df['date'])

第一步:计算每个月对应的最大日期

month_max_date = df.groupby(df['date'].dt.to_period('M'))['date'].max()

第二步:过滤仅保留日期为当月最大日期的行

filtered_df = df[df['date'].isin(month_max_date)]

第三步:按日期分组聚合qty、val的求和

result = filtered_df.groupby('date')[['qty', 'val']].sum()

最终输出结果:

dateqtyval
2021-09-2231333
2021-10-15124999
2021-11-2297888

方案2:按年月分组后直接一步处理

如果你不需要中间过滤后的数据集,也可以直接按年月分组后在组内筛选计算:

df['date'] = pd.to_datetime(df['date'])
result = df.groupby(df['date'].dt.to_period('M')).apply(
    lambda x: x[x['date'] == x['date'].max()][['qty', 'val']].sum()
)
# 若需要把索引替换为实际的最大日期,可补充下面这行
result.index = month_max_date.values

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:57:04