如何去除Pandas DataFrame groupby+agg后的Val子列,简化列结构
解决Pandas GroupBy聚合后多级列的问题
你可以通过两种方式实现需求:直接在聚合时避免生成多级列,或者对已生成的多级列进行扁平化处理。
方法一:聚合时直接指定列名(推荐)
在agg方法中使用元组格式定义新列名,同时设置as_index=False让Class成为普通列,一步到位得到目标结构:
import pandas as pd df = pd.DataFrame({ 'Class': ['A', 'B', 'A', 'B', 'C'], 'Val': [25, 30, 35, 40, 15], }) # 直接生成单级列的结果 grouped = df.groupby('Class', as_index=False).agg(mean=('Val', 'mean'), count=('Val', 'count')) print(grouped)
输出结果:
Class mean count 0 A 30.00 2 1 B 35.00 2 2 C 15.00 1
方法二:扁平化已生成的多级列
如果已经执行了原代码生成了多级列,可以通过修改列名并重置索引来转换结构:
# 原代码生成多级列 grouped = df.groupby(by='Class').agg({'Val': ['mean', 'count']}) # 提取第二级列名作为新的列名 grouped.columns = grouped.columns.get_level_values(1) # 将Class从索引转为普通列 grouped = grouped.reset_index() print(grouped)
输出结果与方法一一致。
内容的提问来源于stack exchange,提问作者user23737620
相关产品推荐
相关产品推荐

