如何在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()
最终输出结果:
| date | qty | val |
|---|---|---|
| 2021-09-22 | 31 | 333 |
| 2021-10-15 | 124 | 999 |
| 2021-11-22 | 97 | 888 |
方案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
相关产品推荐
相关产品推荐

