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

如何对Pandas DataFrame进行分组?求方法与学习建议

Pandas分组思路与函数掌握建议

一、先明确你的分组目标,别上来就硬套函数

新手最容易犯的错就是:手里拿着groupby/stack就往数据上怼,却没想清楚你到底要从分组里得到什么结果。比如是统计每组的均值/总和?把每组的行合并成列表?还是把宽表转成适合分析的长表?不同目标对应完全不同的操作路径。

先补全你的示例数据方便讲解:

import pandas as pd
df = pd.DataFrame({
    'A': [11,11,22,22,33],
    'B': [1,2,3,4,5],
    'C': [10,20,30,40,50]
})

举几个常见场景的对应操作:

  • 要是想按'A'分组后计算B、C列的均值:直接用groupby加聚合函数就行
    df.groupby('A').mean()
    
  • 要是想把每组的B列值合并成列表:用lambda配合agg就能实现
    df.groupby('A')['B'].agg(lambda x: list(x))
    
  • 要是想把分组后的聚合结果转成长格式:先分组聚合,再用stack重塑结构
    grouped_result = df.groupby('A').sum()
    grouped_result.stack().reset_index(name='total_value')
    

二、你之前试了没成功?大概率是踩了这两个坑

  1. 环节不匹配:stack是用来把列索引转成行索引的,得先有一个带多层索引的结果(比如分组聚合后的宽表)再用它,要是直接给原始df套stack再分组,逻辑就乱了。
  2. lambda用错场景:groupby里的lambda是作用在每组的Series/DataFrame上的,比如你想对整组的多列操作,但只传了单列,或者写的逻辑和每组的数据结构不兼容,肯定会报错。

三、这类操作会随经验变直观吗?绝对会!

我刚学Pandas的时候,对着groupby的文档看半小时都懵,连“聚合”和“转换”的区别都搞不清。后来专门抽了一周练各种分组场景:分组过滤掉小样本组、分组给每行加组内序号、分组合并文本字段……练完之后,现在看到需求第一反应就是拆三步:

  1. 找分组依据(哪列当分组键)
  2. 确定要对分组数据做什么(聚合/转换/过滤)
  3. 选对应方法(聚合用agg/sum;转换用transform;过滤用filter)

说白了就是见多了,自然能把需求和函数对应上,不用再瞎试。

四、给你几个掌握Pandas函数的实用建议

  • 核心函数抓重点看文档:比如groupby的文档,别从头到尾啃,重点看「聚合」「转换」「过滤」这三个核心板块,每个板块抄2-3个示例自己跑一遍,比看十篇博客管用。
  • 用需求倒推函数,别反过来:比如你想“给每组的某列去重”,直接想groupby之后对列用unique(),也就是df.groupby('A')['B'].unique(),而不是先翻函数列表找哪个能用。
  • 链式调用要拆解,别堆一堆:比如df.groupby('A').filter(lambda x: len(x)>=2).sort_values('B'),拆成三步理解:先分组→过滤掉组内行数少于2的→按B列排序,每一步都明确目的,调试也方便。
  • 记不住就查,但要查匹配的示例:搜“pandas groupby 分组过滤示例”这种精准关键词,找和你需求一致的代码,改改参数就能用,用多了自然就记住函数的用法了。

新手真的别焦虑,Pandas看似函数多,但常用核心函数也就二三十个,分组相关的就是groupby、agg、transform、filter、stack/unstack这些,练熟了大部分场景都能搞定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:26:42