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

求助:Python循环结合GroupBy为多列创建均值衍生列

问题分析与解决方案

原代码的问题

  1. 列筛选条件错误:你定义的collist = ['avg_'],但目标列的前缀是avg(如avg_jump)而非avg_,导致df.filter(like='avg_')匹配不到任何列,后续逻辑完全不执行。
  2. 赋值逻辑错误:即便匹配到多列avgcols,df[f'{col}_2']试图将多列的transform结果(DataFrame类型)赋值给单个列,会引发维度不匹配的报错。

正确实现方法

方法一:批量处理(更高效)

直接筛选所有以avg开头的列,分组计算均值后重命名列,再合并回原DataFrame:

import pandas as pd
import numpy as np

# 构造示例数据
data = {
    'rater_id': [100,100,101,101,102,103],
    'being_rated_id': [200,200,200,200,201,202],
    'combine_id': ['100200','100200','101200','101200','102201','103202'],
    'avg_jump': [3,4,1,2,3,4],
    'avg_run': [3,4,1,3,2,4],
    'avg_swim': [2,1,2,2,3,4],
    'category': ['heats','heats','finals','finals','heats','finals']
}
df = pd.DataFrame(data)

# 筛选所有以avg开头的列
avg_cols = df.columns[df.columns.str.startswith('avg')]

# 分组计算均值,并重命名列添加_2后缀
grouped_means = df.groupby(['combine_id','category'])[avg_cols].transform(np.mean)
grouped_means.columns = [f'{col}_2' for col in grouped_means.columns]

# 合并回原DataFrame
df = pd.concat([df, grouped_means], axis=1)

# 可选:去掉avg_swim列以匹配你的预期输出
df = df.drop('avg_swim', axis=1)
print(df)

方法二:循环遍历单个列

如果需要逐个处理每一列,可使用以下写法:

import pandas as pd
import numpy as np

# 构造示例数据(同上)
data = {
    'rater_id': [100,100,101,101,102,103],
    'being_rated_id': [200,200,200,200,201,202],
    'combine_id': ['100200','100200','101200','101200','102201','103202'],
    'avg_jump': [3,4,1,2,3,4],
    'avg_run': [3,4,1,3,2,4],
    'avg_swim': [2,1,2,2,3,4],
    'category': ['heats','heats','finals','finals','heats','finals']
}
df = pd.DataFrame(data)

# 遍历所有以avg开头的列
for col in df.columns[df.columns.str.startswith('avg')]:
    # 计算分组均值并添加新列
    df[f'{col}_2'] = df.groupby(['combine_id','category'])[col].transform(np.mean)

# 可选:去掉avg_swim列
df = df.drop('avg_swim', axis=1)
print(df)

输出结果

两种方法都会生成符合预期的结果:

rater_id  being_rated_id combine_id  avg_jump  avg_run  category  avg_jump_2  avg_run_2
0       100             200     100200         3        3     heats         3.5        3.5
1       100             200     100200         4        4     heats         3.5        3.5
2       101             200     101200         1        1    finals         1.5        2.0
3       101             200     101200         2        3    finals         1.5        2.0
4       102             201     102201         3        2     heats         3.0        2.0
5       103             202     103202         4        4    finals         4.0        4.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:01:09