Pandas按月份分组计算上一月最大营收的实现方法
解决方案
核心逻辑是先计算出每个月的最大营收值,对月度最大值整体偏移1个单位得到上月最大值,再将上月最大值按月份匹配回原数据集的每一行,具体实现如下:
前置条件
确保date列已经转换为Pandas datetime类型,若未转换可先执行:
df['date'] = pd.to_datetime(df['date'])
实现代码
# 提取年月标识,避免跨年度时单独取月份出现匹配错误 df['year_month'] = df['date'].dt.to_period('M') # 计算每个月的最大营收 monthly_max = df.groupby('year_month')['revenue'].max() # 对月度最大值整体偏移1位,得到每个月对应的上月最大营收 last_month_max = monthly_max.shift(1) # 将上月最大营收映射回原数据的对应行 df['max'] = df['year_month'].map(last_month_max) # 可选:删除辅助生成的year_month列 df = df.drop('year_month', axis=1)
原方法问题说明
你之前直接对transform返回的结果加shift()不生效,是因为transform会返回和原DataFrame长度完全一致的序列,直接偏移是逐行移动,而非按整个月份分组整体偏移。先聚合得到每个月唯一的最大值序列后再偏移,就能实现按分组整体偏移的需求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

