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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:20