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

Pandas按id分组计算多列标准差与均值并新增为列的实现方法

首先筛选出需要计算的数值列,再批量聚合计算后合并到原表即可,以下是两种可行实现:

方法1:transform 实现(逻辑简单,直接对齐原表行数)

import pandas as pd

# 1. 筛选所有数值类型的列,自动排除id、f0这类非数值列
# 如需手动指定列,直接写成 num_cols = ['f1', 'f2', ..., 'fn'] 即可
num_cols = mdata.select_dtypes(include='number').columns.tolist()

# 2. 按id分组,对所有数值列同时计算标准差和均值
grouped_stats = mdata.groupby('id')[num_cols].transform(
    lambda x: pd.Series(
        [x.std(skipna=True, ddof=1), x.mean(skipna=True)],
        index=[f'{x.name}_std', f'{x.name}_avg']
    )
)

# 3. 将统计列合并到原表
mdata = pd.concat([mdata, grouped_stats], axis=1)

# 可选:调整列顺序,让每个原数值列后紧跟对应的std和avg列,和你预期的输出格式一致
ordered_cols = []
for col in mdata.columns:
    if col not in num_cols:
        ordered_cols.append(col)
    else:
        ordered_cols.extend([col, f'{col}_std', f'{col}_avg'])
mdata = mdata[ordered_cols]

方法2:聚合后merge实现(大数据量下性能更高)

import pandas as pd

num_cols = mdata.select_dtypes(include='number').columns.tolist()

# 1. 先计算每个id对应的所有数值列的统计指标
id_stats = mdata.groupby('id')[num_cols].agg(['std', 'mean']).reset_index()
# 把多层列索引展开为单层,按{列名_统计指标}格式命名
id_stats.columns = ['id'] + [f'{col}_{stat}' for col, stat in id_stats.columns[1:]]

# 2. 按id关联回原表
mdata = mdata.merge(id_stats, on='id', how='left')

注:你之前写的测试代码中选取了f0列计算,f0是字符串类型列,无法计算标准差和均值,实际使用时注意选择数值列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:27:04