Pandas groupby后合并列:按组计算全特征统计量的实现需求
解决Pandas GroupBy后合并所有特征统计量的需求
嘿,我完全懂你的困扰——agg()方法乍一看好像只能针对单个列做聚合,但你想要的是给每个分组里的所有特征批量计算统计量,还要把结果顺利合并回去对吧?别担心,我们可以基于agg()扩展,或者结合merge来实现,下面给你两个贴合需求的实用方案:
方案一:给原数据每行添加上对应分组的所有特征统计量
如果你希望原DataFrame里的每一行,都带上它所属分组的所有特征统计量(比如均值、总和),可以这么做:
首先构造一个示例DataFrame方便演示:
import pandas as pd # 示例数据:group是分组列,feat1-feat3是特征列 df = pd.DataFrame({ 'group': ['A', 'A', 'B', 'B', 'B'], 'feat1': [1, 2, 3, 4, 5], 'feat2': [10, 20, 30, 40, 50], 'feat3': [100, 200, 300, 400, 500] })
然后计算每个分组的统计量,再合并回原数据:
# 第一步:批量生成所有特征的统计量(这里以均值、总和为例) # 用字典推导式自动为每个特征生成统计量列名,比如feat1_mean、feat1_sum group_stats = df.groupby('group').agg( **{f'{col}_mean': (col, 'mean') for col in df.columns if col != 'group'}, **{f'{col}_sum': (col, 'sum') for col in df.columns if col != 'group'} ).reset_index() # 第二步:把统计量合并回原DataFrame merged_df = df.merge(group_stats, on='group')
运行后merged_df的每一行都会包含原特征值,加上该分组所有特征的均值和总和,比如分组A的两行都会有feat1_mean=1.5、feat2_sum=30这类字段。
方案二:生成每个分组的统计量汇总表
如果你想要的是一个以分组为行、所有特征统计量为列的汇总表,agg()其实完全可以做到,只是需要批量处理所有特征:
# 对所有非分组列,一次性计算多个统计量(均值、总和、标准差) grouped_summary = df.groupby('group').agg(['mean', 'sum', 'std']) # 扁平化多层列名,让结果更易读(比如把(feat1, mean)改成feat1_mean) grouped_summary.columns = ['_'.join(col_pair) for col_pair in grouped_summary.columns] grouped_summary = grouped_summary.reset_index()
这样得到的grouped_summary里,每个分组占一行,列是feat1_mean、feat1_sum、feat2_std这类清晰命名的统计量,完美覆盖所有特征的聚合需求。
这两个方案都避开了手动逐个处理列的麻烦,完全适配你“为每个分组计算所有特征统计量”的需求~
内容的提问来源于stack exchange,提问作者Novin Shahroudi
相关产品推荐
相关产品推荐

