Pandas如何按指定列分组对不同列执行差异化聚合操作
实现方法
完全可以用pandas原生的分组聚合接口一次性完成需求,写法简洁符合Pythonic规范,不需要额外循环或自定义处理。
核心是给groupby后的agg方法传入列-聚合函数字典,为每一列单独指定聚合规则:
# 按ops列分组,为不同列指定对应聚合逻辑 agg_result = df.groupby(by='ops', as_index=False).agg({ 'col1': 'first', # col1取分组第一个值 'col2': 'min', # col2取分组最小值 'col3': 'max', # col3取分组最大值 'col4': 'last' # col4取分组最后一个值 })
输出结果
执行上述代码后得到的结果完全匹配预期结构:
ops col1 col2 col3 col4 0 1 5 7 67 12 1 2 34 9 10 3
参数说明
as_index=False:避免分组键ops被设置为DataFrame的行索引,保留为普通列,和参考结果结构一致- 字典内聚合函数除了传入字符串别名,也可以传入pandas内置的聚合方法对象(比如
pd.Series.min),效果完全相同
如果需要自定义聚合后的列名,可以使用pandas 0.25及以上版本支持的命名聚合语法,可读性更高:
agg_result = df.groupby(by='ops', as_index=False).agg( col1=('col1', 'first'), col2=('col2', 'min'), col3=('col3', 'max'), col4=('col4', 'last') )
这种写法和前面字典传参的输出结果完全一致。
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

