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

如何用Pandas按name分组后基于cond条件计算分组均值并赋值新列

解决方案

方法一:先计算均值字典再映射

逻辑清晰、步骤明确的实现方式:

  1. 筛选出所有cond=0的行,按name分组计算score的均值
  2. 将计算结果转为字典,通过map方法把均值赋值给对应name的所有行
import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'name': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'score': [10, 5, 20, 30, 10, 20, 30, 40],
    'cond': [0, 1, 2, 3, 0, 0, 4, 6]
})

# 计算每个name对应的cond=0的score均值
avg_map = df[df['cond'] == 0].groupby('name')['score'].mean().to_dict()
# 为所有行添加group_avg列
df['group_avg'] = df['name'].map(avg_map)

print(df)

方法二:使用groupby+apply+reindex

通过分组后自定义逻辑计算均值,再将结果匹配到原DataFrame的每一行:

df['group_avg'] = df.groupby('name').apply(
    lambda group: group[group['cond'] == 0]['score'].mean()
).reindex(df['name']).values

结果验证

运行上述代码后,输出结果与要求完全一致:

name  score  cond  group_avg
0    A     10     0       10.0
1    A      5     1       10.0
2    A     20     2       10.0
3    A     30     3       10.0
4    B     10     0       15.0
5    B     20     0       15.0
6    B     30     4       15.0
7    B     40     6       15.0

内容的提问来源于stack exchange,提问作者Charlie H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:29:57