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

如何用Pandas指令替代循环,基于IC列条件计算DataFrame的PromP值?

高效计算PromP列的Pandas方案

核心思路

用Pandas的向量化操作替代嵌套循环,通过条件掩码筛选符合要求的月度数据,再逐行计算平均值,彻底规避循环带来的性能损耗。

实现代码

假设你的DataFrame中,2021年1-12月的列名为2021_1到2021_12,执行以下代码:

import numpy as np
import pandas as pd

# 1. 定义2021年月度数据列
monthly_cols = [f'2021_{i}' for i in range(1, 13)]

# 2. 创建条件掩码:根据IC列筛选对应月度值
# IC为G时,保留大于Promedio的月度值;IC为L时,保留小于Promedio的月度值
mask = np.where(
    df['IC'] == 'G',
    df[monthly_cols] > df['Promedio'].values[:, None],  # 广播平均值到月度列维度
    df[monthly_cols] < df['Promedio'].values[:, None]
)

# 3. 计算PromP:对每行符合条件的月度值取平均
df['PromP'] = df[monthly_cols].where(mask).mean(axis=1)

关键说明

  • 向量化优势:np.where和df.where都是底层优化的向量运算,比Python循环快数倍,适配大规模数据集。
  • 维度对齐:df['Promedio'].values[:, None]将一维平均值列转为二维数组,实现和月度列的逐元素比较。
  • 空值自动处理:where会把不符合条件的值设为NaN,mean(axis=1)自动忽略空值,正好匹配“只计算符合条件月度数据”的需求。
  • 灵活调整:若需要包含等于平均值的情况,将代码中的>改为>=、<改为<=即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:01:09