如何对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')
二、你之前试了没成功?大概率是踩了这两个坑
- 环节不匹配:
stack是用来把列索引转成行索引的,得先有一个带多层索引的结果(比如分组聚合后的宽表)再用它,要是直接给原始df套stack再分组,逻辑就乱了。 - lambda用错场景:
groupby里的lambda是作用在每组的Series/DataFrame上的,比如你想对整组的多列操作,但只传了单列,或者写的逻辑和每组的数据结构不兼容,肯定会报错。
三、这类操作会随经验变直观吗?绝对会!
我刚学Pandas的时候,对着groupby的文档看半小时都懵,连“聚合”和“转换”的区别都搞不清。后来专门抽了一周练各种分组场景:分组过滤掉小样本组、分组给每行加组内序号、分组合并文本字段……练完之后,现在看到需求第一反应就是拆三步:
- 找分组依据(哪列当分组键)
- 确定要对分组数据做什么(聚合/转换/过滤)
- 选对应方法(聚合用
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
相关产品推荐
相关产品推荐

