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

pandas DataFrame中创建依赖其他变量的均值列的两种实现

原始示例数据

import numpy as np
import pandas as pd

df = pd.DataFrame({'Group':['a','a','b','b','b','c','c'], 'Label':[0,1,0,1,1,0,1], 'Num':[1,2,3,4,5,6,7]})

需求1:仅同组Label=1的行赋值对应均值,其余行赋值0/NaN

# 第一步:生成每个Group对应Label=1的Num均值映射表
label1_mean_map = df[df['Label'] == 1].groupby('Group')['Num'].mean()
# 第二步:匹配映射值到所有行
df['mean'] = df['Group'].map(label1_mean_map)
# 第三步:将非Label=1的行置为0,要NaN就把0换成np.nan
df.loc[df['Label'] != 1, 'mean'] = 0

执行后df['mean']结果为[0,2,0,4.5,4.5,0,7],符合预期。


需求2:同组所有行均赋值该组Label=1的均值

# 生成每个Group对应Label=1的Num均值映射表
label1_mean_map = df[df['Label'] == 1].groupby('Group')['Num'].mean()
# 直接匹配映射值到所有行即可
df['mean'] = df['Group'].map(label1_mean_map)

执行后df['mean']结果为[2,2,4.5,4.5,4.5,7,7],符合预期。

如果偏好transform写法,也可以用下面的代码实现需求2,效果一致:

df['mean'] = df.groupby('Group').transform(lambda g: g.loc[g['Label'] == 1, 'Num'].mean())['Num']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:39:03