如何将DataFrame按月分组并计算截至当月的累计最高Quantity值
解决方案
步骤说明
针对大规模数据集,优先用Pandas的向量化操作保证效率,具体实现如下:
- 生成年月标识列:从
Date列提取Month/Year格式(如Jan/2019),用dt.strftime('%b/%Y')完成格式转换。 - 按月分组取当月最大值:对每个年月分组,计算该月内
Quantity的最大值——原数据是每日记录,每个月可能有多条,先取当月峰值。 - 计算累计最大值:对分组后的月度最大值序列,用
cummax()计算截至当前月份的全局最高值,直接满足"截至对应月份的Quantity最高值"需求。 - 整理输出格式:将结果转换为目标结构的DataFrame。
代码实现
import pandas as pd # 假设原始DataFrame名为df,且Date列已为datetime类型 # 若Date列未转换为datetime,先执行:df['Date'] = pd.to_datetime(df['Date']) # 1. 添加年月标识列 df['Month/Year'] = df['Date'].dt.strftime('%b/%Y') # 2. 按月分组,取当月Quantity的最大值 monthly_max = df.groupby('Month/Year')['Quantity'].max().reset_index() # 3. 计算截至当月的累计最高值 monthly_max['Till Highest'] = monthly_max['Quantity'].cummax() # 4. 移除中间列,得到目标DataFrame result = monthly_max.drop(columns=['Quantity']) print(result)
输出验证
运行代码后会得到与示例一致的结果:
Month/Year Till Highest 0 Jan/2019 15 1 Feb/2019 15 2 May/2019 25 3 Jul/2019 25 4 Sep/2019 44 5 Dec/2019 44 6 Apr/2020 111 7 Jun/2020 111
效率说明
所有操作均为Pandas内置的向量化/分组聚合操作,避免了Python循环,在百万级甚至更大规模的数据集上也能保持高效运行。
内容的提问来源于stack exchange,提问作者Starlord22
相关产品推荐
相关产品推荐

