Pandas的groupby支持多列分组:1. 用列表如df.groupby(['A','B']);2. 可用变量元组动态传入;3. 加as_index=False保留分组列为普通列;4. 结合agg字典实现差异化聚合;5. 聚合后用sort_values排序。

如果您在使用 Pandas 的 groupby 方法时希望依据多个字段同时划分数据组,则该操作完全支持。以下是实现多列分组的具体方法说明:
一、基础多列分组语法
多列分组的本质是将多个列的值组合成唯一键,从而为每种组合创建一个独立的数据组。Pandas 会自动将传入的列名列表解析为联合分组条件。
1、导入 pandas 库并构造示例 DataFrame:
2、调用 df.groupby(['列A', '列B']),其中列A与列B为需联合分组的字段名。
3、对返回的 GroupBy 对象应用聚合函数,如 .sum()、.mean() 或 .size()。
二、使用元组形式指定多列分组键
当列名来自变量或需动态构建时,可将列名存入元组后解包传入,确保结构清晰且兼容性更强。
1、定义列名列表:columns_to_group = ['year', 'quarter']。
2、执行分组:df.groupby(columns_to_group)。
3、验证分组结果是否生成预期数量的组:len(list(df.groupby(columns_to_group)))。
三、保留分组列为普通列而非索引
默认情况下,groupby 输出的分组列会成为行索引。若需将其保留在结果 DataFrame 中作为常规列,需显式设置参数控制输出结构。
1、在 groupby 后链式调用 .agg(...) 或其他聚合方法。
2、添加 as_index=False 参数:df.groupby(['A', 'B'], as_index=False).sum()。
3、确认结果中 A 和 B 列仍存在于 DataFrame 的列中,而非仅作为索引存在。
四、结合 agg 实现多列差异化聚合
多列分组常需对不同目标列施加不同聚合逻辑,此时需借助 agg 方法传递字典映射,以明确各列的处理方式。
1、构造聚合规则字典:{'sales': 'sum', 'profit': 'mean', 'region': 'first'}。
2、在分组对象上调用 .agg(rule_dict)。
3、检查输出列名是否准确反映所设定的聚合函数,例如 sales_sum、profit_mean、region_first。
五、按多列分组后排序输出
分组结果默认不保证顺序,若需按某聚合结果列排序,应在聚合完成后单独调用 sort_values 方法。
1、完成分组与聚合:result = df.groupby(['cat1', 'cat2']).sum()。
2、重置索引以便后续排序:result = result.reset_index()。
3、按目标列降序排列:result.sort_values('value', ascending=False)。








