Pandas DataFrame按月份区间条件分组求和的聚合操作实现方法
实现方案
最优方案:使用pd.cut分箱+分组求和
这是性能最高、可读性最好的实现方式,基于pandas原生向量化运算,数据量较大时也能高效运行,后续调整分组规则也非常方便。
完整代码
import pandas as pd # 示例DataFrame df = pd.DataFrame(data= {'month' : [2,7,4,8], 'sales' : [10,40,70,50]}) # 方式1:先新增分组列再聚合,方便后续核对 df['month_group'] = pd.cut( df['month'], bins=[0, 6, 12], # 分箱区间默认左开右闭,(0,6]刚好对应1-6月 labels=['1-6月', '7-12月'] ) result = df.groupby('month_group', observed=True)['sales'].sum() # 方式2:不新增临时列,直接聚合 # result = df.groupby( # pd.cut(df['month'], bins=[0,6,12], labels=['1-6月', '7-12月']), # observed=True # )['sales'].sum() print(result)
输出结果
month_group 1-6月 80 7-12月 90 Name: sales, dtype: int64
方案说明
pd.cut的区间规则刚好匹配需求,不需要额外调整开闭参数observed=True适配pandas 1.5+版本的分组规则,避免输出不存在的空分组,结果更干净- 相比自定义
apply、map映射的实现,该方案是向量化运算,性能高1~2个数量级,适合所有数据规模的场景
内容的提问来源于stack exchange,提问作者Minfetli
相关产品推荐
相关产品推荐

