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

Pandas分组聚合:为未指定列设置默认first聚合函数的优雅实现

Pandas Groupby聚合:指定列自定义函数,其余列自动应用first

核心思路

先明确分组列和已指定聚合规则的列,通过集合运算筛选出未被指定的剩余列,统一为这些列添加first聚合规则,最后合并规则字典执行分组聚合。同时通过列名大小写统一转换,解决列名大小写差异的匹配问题。

完整实现代码

import pandas as pd

# 示例DataFrame(包含大小写混合的列名)
data = {
    'GroupCol': ['A', 'A', 'B', 'B'],
    'Col1': [1, 2, 3, 4],
    'Col2': [10, 20, 30, 40],
    'col3': [100, 200, 300, 400],
    'COL4': [1000, 2000, 3000, 4000]
}
df = pd.DataFrame(data)

# 1. 定义分组列和自定义聚合规则
group_cols = ['GroupCol']
agg_spec = {'Col1': 'sum', 'Col2': 'mean'}

# 2. 处理列名大小写不敏感的匹配
lower_group = [col.lower() for col in group_cols]
lower_agg_keys = [key.lower() for key in agg_spec.keys()]
lower_all_cols = [col.lower() for col in df.columns]

# 3. 筛选出未指定规则的剩余列(保留原列名)
remaining_cols = [
    df.columns[idx] for idx, col in enumerate(lower_all_cols)
    if col not in lower_group + lower_agg_keys
]

# 4. 为剩余列添加first聚合规则
agg_spec.update({col: 'first' for col in remaining_cols})

# 5. 执行分组聚合
result = df.groupby(group_cols, as_index=False).agg(agg_spec)
print(result)

代码说明

  • 自动适配列名变化:无需硬编码剩余列名,当DataFrame新增/删除未指定规则的列时,代码会自动识别并应用first规则。
  • 大小写兼容:通过将所有列名、分组列、聚合规则列统一转为小写进行匹配,避免因列名大小写差异导致的漏判。
  • 扩展性强:如果需要修改默认聚合函数,只需将'first'替换为其他函数(如'last'、'median')即可。

内容的提问来源于stack exchange,提问作者Honza S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:05:38