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

如何按多列聚合并展平Pandas DataFrame

解决方案

要实现你需要的分组聚合并展平结果的需求,可以通过分组聚合+unstack展平+列重命名+合并结果这几个步骤完成,具体如下:

步骤1:定义单个分类列的处理逻辑

对每个分类列(cat1/cat2),先按a和分类列分组求和,再用unstack()把分类值转为列,最后重命名列名匹配你的期望格式:

def process_category(df, cat_col):
    # 按a和分类列分组,对is、fs列求和
    grouped = df.groupby(['a', cat_col])[['is', 'fs']].sum()
    # 把分类列的不同取值转为列(完成展平)
    unstacked = grouped.unstack(level=cat_col)
    # 重命名列,生成sum(is|cat1=C)这类格式的表头
    unstacked.columns = [f"sum({col}|{cat_col}={cat_val})" 
                         for col, cat_val in unstacked.columns]
    # 重置索引,将a从索引转为普通列
    return unstacked.reset_index()

步骤2:处理两个分类列并合并结果

调用上述函数分别处理cat1和cat2,再通过merge()按a列合并结果:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({'a':['a1','a1','a1','a2','a2','a3','a3','a3','a3'],
                   'cat1':['C','D','D','C','D','D','D','D','C'],
                   'cat2':['X','Y','X','Y','X','Y','X','Y','X'],
                   'is':[1,2,3,1,2,1,2,3,4],
                   'fs':[.1,.2,.3,.1,.2,.1,.2,.3,.4]})

# 分别处理cat1和cat2
df_cat1 = process_category(df, 'cat1')
df_cat2 = process_category(df, 'cat2')

# 按a合并两个结果表
final_df = pd.merge(df_cat1, df_cat2, on='a')

步骤3:查看最终输出

运行后final_df的结果与你的期望完全一致:

a  sum(is|cat1=C)  sum(fs|cat1=C)  sum(is|cat1=D)  sum(fs|cat1=D)  sum(is|cat2=X)  sum(fs|cat2=X)  sum(is|cat2=Y)  sum(fs|cat2=Y)
0  a1               1             0.1               5             0.5               4             0.4               2             0.2
1  a2               1             0.1               2             0.2               2             0.2               1             0.1
2  a3               4             0.4               6             0.6               6             0.6               4             0.4

关键逻辑说明

  • unstack(level=cat_col):将分组后的二级索引(分类列的不同取值)转为列,这是解决你当前结果未展开的核心操作。
  • 列重命名时利用了MultiIndex的结构,直接遍历组合出你需要的格式。
  • 最后用merge()按a合并两个处理后的DataFrame,实现cat1和cat2结果的整合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:40:35