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

如何在pandas中基于标识列对指定列进行条件求平均计算

Pandas按条件创建新列高效实现方案

直接使用Pandas+Numpy的向量化操作即可实现,不需要调用apply遍历行,也不需要创建额外中间列,性能远高于行遍历方案:

核心实现代码

import numpy as np
import pandas as pd

# 构造示例数据集
cols = ['A','A_flag','B','B_flag']
d= [(5,False,3,False),(2,False,7,True),(1,True,10,True),(12,True,2,False)]
df=pd.DataFrame(columns=cols,data=d)

# 核心逻辑
# 1. 生成符合条件的行掩码:A_flag或B_flag至少一个为True
mask = df['A_flag'] | df['B_flag']
# 2. 按条件赋值,不符合的行默认返回NaN
df['avg_col'] = np.where(mask, (df['A'] + df['B'])/2, np.nan)

输出结果

运行后df的avg_col列值如下:

行索引avg_col
0NaN
14.5
25.5
37.0

补充说明

如果你实际需求是仅对flag为True的列的数值取平均(比如只有B_flag为True时仅计算B的平均值,只有A_flag为True时仅计算A的平均值,两个都为True时算A+B的平均),可以用以下逻辑实现:

# 计算有效列的数值和,以及有效列数量
valid_sum = df['A'] * df['A_flag'] + df['B'] * df['B_flag']
valid_count = df['A_flag'].astype(int) + df['B_flag'].astype(int)
# 有效列数量为0时返回NaN,否则返回平均
df['avg_col'] = np.where(valid_count > 0, valid_sum / valid_count, np.nan)

以上两种实现均为全向量化操作,数据量越大性能优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:07