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.
相关产品推荐
相关产品推荐

