You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Pandas分组聚合时批量为多列配置相同聚合规则的方法

Pandas批量配置分组聚合规则解决方案

完全支持批量为指定列子集应用相同聚合操作,你可以通过字段筛选+字典推导式生成聚合规则,不需要手动逐个填写30个Demand字段,同时针对1500万行的大表场景还可以做性能优化,具体实现如下:

实现逻辑

  • 第一步:筛选出所有以Demand结尾的需求类字段
  • 第二步:构造聚合规则字典,单独配置Date列的间隔计算逻辑,批量给所有Demand字段配置求和规则
  • 第三步:将聚合规则字典直接传入agg()方法完成分组计算

优化说明

针对千万级大表,不要用lambda x: x.sum()这种自定义求和逻辑,直接传入字符串'sum'调用pandas内置的C优化实现,运算速度会快数倍。如果内存占用过高,可以提前只加载参与计算的列,减少不必要的内存开销。

完整代码示例

import pandas as pd
import datetime as dt

# 日期格式转换
df['Date'] = pd.to_datetime(df['Date'])
# 批量筛选所有Demand结尾的需求列
demand_cols = [col for col in df.columns if col.endswith('Demand')]

# 构造聚合规则字典
agg_dict = {
    # 计算最近购买日到固定截止日2021-01-01的间隔天数
    'Date': lambda x: (dt.date(2021, 1, 1) - x.max()).days
}
# 批量为所有Demand列添加求和规则
agg_dict.update({col: 'sum' for col in demand_cols})

# 执行分组聚合
newdf = df.groupby('CustomerID').agg(agg_dict)
# 可选:重命名Date列更符合语义
newdf = newdf.rename(columns={'Date': 'DaysSinceLastPurchase'})

如果你的需求是用数据内的最大日期作为截止基准,而非固定的2021-01-01,替换agg_dict构造逻辑即可:

cutoffDate = df['Date'].max() + dt.timedelta(days = 1)
agg_dict = {
    'Date': lambda x: (cutoffDate - x.max()).days
}

内容的提问来源于stack exchange,提问作者Parseval

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:24:02