为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 数据聚合:分组统计与聚合函数应用-CSDN博客

咱们已经并肩走过了 14 天。如果说前几天的筛选和清洗是在做“扫除”,那么今天第 15 天的数据聚合(Aggregation),就是在做“炼金”。

在架构师眼中,原始数据就像是散落在 电科金仓 KingbaseES (KES) 里的散碎银两,虽然有价值,但不够壮观。只有通过聚合,把它们按维度(比如地区、时间、行为类型)揉碎了再重组,你才能看到隐藏在数字背后的业务趋势群体特征。这就是 AI 特征工程里最核心的一环。


壹:聚合的真谛——“拆分-应用-组合”

Pandas 的聚合逻辑遵循经典的 Split-Apply-Combine 模型。

  1. Split(拆分):根据某个键(Key)把数据切成一堆小方块。
  2. Apply(应用):对每个小方块算个平均值、最大值或者是你自己定义的算法。
  3. Combine(组合):把结果重新拼成一张漂亮的报表。

这其实和咱们搞分布式架构里的 MapReduce 异曲同工。你要是能理解分布式计算的原理,玩转 Pandas 的 groupby 简直就是降维打击。


贰:实战:Conda 环境里的“数林聚义”

咱们在 KES_AI_Lab 环境里正式开搞。如果你在导入数据时卡住了,先确认你的驱动(ksycopg2)是不是在官方下载页面拿到的最新版。

.mean()’, showing a clean output of average scores by region]


叁:核心代码:从 KES 业务表到特征画像

假设我们在 电科金仓 KES 存了一张用户消费表,我们需要统计每个地区用户的平均消费、最高频率以及活跃度的波动。


import ksycopg2
import pandas as pd
import numpy as np

def aggregation_lab_kes():
    print("--- [电科金仓] 维度聚合与特征衍生实战 ---")
    
    conn_params = "dbname=test user=username password=123456 host=127.0.0.1 port=54321"
    
    try:
        conn = ksycopg2.connect(conn_params)
        
        query = "SELECT num as user_id, vcb as region, bcb as category FROM test_newtype"
        df = pd.read_sql(query, conn)
        
        
        df['spend'] = np.random.uniform(10, 1000, size=len(df))
        df['active_hours'] = np.random.randint(1, 24, size=len(df))

        
        
        region_mean = df.groupby('region')['spend'].mean()
        print("\n[地区消费均值]:")
        print(region_mean)

        
        
        agg_result = df.groupby('region').agg({
            'spend': ['mean', 'max'],
            'active_hours': 'sum',
            'user_id': 'count' 
        })
        
        agg_result.columns = ['平均消费', '最高消费', '总活跃时长', '用户总数']
        print("\n[多维度聚合报表]:")
        print(agg_result)

        
        
        def range_func(x):
            return x.max() - x.min()
        
        custom_agg = df.groupby('category')['spend'].apply(range_func)
        print("\n[自定义业务逻辑 - 消费极差]:")
        print(custom_agg)

        conn.close()
        return agg_result

    except Exception as e:
        print(f"聚合计算过程中链路抖动: {e}")

if __name__ == "__main__":
    aggregation_lab_kes()

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556

肆:架构师的碎碎念:聚合中的“分寸感”

在深耕 AI 的这些年,我见过太多把 groupby 玩坏的案例。
有人喜欢把所有的维度都揉在一起做一个巨大的透视表,结果导致内存直接原地爆炸。

从人文的角度看,聚合其实是一种**“舍得”**。为了看到整体的趋势,你必须舍弃掉个体数据的琐碎。一个优秀的架构师知道什么时候该保留细节(微服务、单行记录),什么时候该抽象总结(聚合报表、全局画像)。

我们在使用 电科金仓 KES 时,有些统计可以在数据库端通过 GROUP BY 完成(利用索引加速);而有些涉及到复杂非线性变换的,则适合放在 Pandas 里。这种**“算力分配”的艺术**,才是资深架构师的真功夫。


结语

今天咱们学会了怎么把散沙聚成塔。但数据不仅仅有横向的类别,还有纵向的时间。


既然聊到聚合,需要我帮你写一个基于“时间窗口”的滚动聚合(Rolling Window Aggregation)脚本吗?这在处理 KES 里的实时金融交易或设备监控数据时是标配。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消