Python/Pandas多列按不同规则分组聚合 批量处理需求列求和的优化方案
解决方法
你可以通过动态构造聚合规则字典实现批量配置,不需要手动逐个写30个需求列的聚合规则,同时还能优化大体积数据的计算性能。
具体实现步骤
- 首先预处理日期列,指定统一的截止日期
import pandas as pd import datetime as dt # 转换日期格式 df['Date'] = pd.to_datetime(df['Date']) # 按需求固定截止日期为2021-01-01,不要用数据集最大日期推导避免逻辑偏差 cutoffDate = pd.to_datetime('2021-01-01')
- 批量筛选所有需求列
如果你的需求列统一带Demand后缀,可以自动匹配:
demand_cols = [col for col in df.columns if col.endswith('Demand')]
如果命名无统一规则,也可以手动维护需求列列表:
demand_cols = ['MenswearDemand', 'HomeDemand'] # 补充所有你需要求和的需求列即可
- 动态构造聚合规则字典
agg_rules = { 'Date': lambda x: (cutoffDate - x.max()).days } # 批量给所有需求列添加求和规则 agg_rules.update({col: 'sum' for col in demand_cols})
- 执行分组聚合
newdf = df.groupby('CustomerID').agg(agg_rules)
性能优化提示
你原有代码里用lambda x: x.sum()的写法对1500万行数据效率很低,直接传字符串'sum'调用pandas内置的Cython优化聚合函数,计算速度能提升数倍。
内容的提问来源于stack exchange,提问作者Parseval
相关产品推荐
相关产品推荐

