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

如何在Pandas中基于相邻列指定值计算对应Qty列的平均值

解决方案

方法思路

核心是先把不符合条件的qty值标记为NaN,再利用pandas的mean()自动忽略NaN的特性计算每行平均值,这种方法比apply()效率高很多,更适配大规模数据集。

代码实现

import pandas as pd

# 构造示例数据集
data = {
    '销售额': [42, 56, 78],
    'yr10cd': ['A', 'T', 'A'],
    'yr10qty': [45, 58, 75],
    'yr9cd': ['A', 'A', '0'],
    'yr9qty': [47, 52, 0],
    'yr8cd': ['A', '0', '0'],
    'yr8qty': [49, 0, 0]
}
df = pd.DataFrame(data)

# 提取所有年份对应的cd和qty列对(实际场景可扩展到yr1)
year_suffixes = ['10', '9', '8']
valid_qty_cols = []
for suffix in year_suffixes:
    cd_col = f'yr{suffix}cd'
    qty_col = f'yr{suffix}qty'
    # 仅保留cd列为"A"的qty值,其余设为NaN
    df[f'valid_{qty_col}'] = df[qty_col].where(df[cd_col] == 'A')
    valid_qty_cols.append(f'valid_{qty_col}')

# 计算每行平均值并新增列
df['平均值'] = df[valid_qty_cols].mean(axis=1)

# 可选:删除中间生成的valid列
df = df.drop(valid_qty_cols, axis=1)

print(df)

代码说明

  1. 列配对处理:通过年份后缀匹配对应的cd标识列和qty数值列,确保每一组对应关系准确。
  2. 有效值过滤:用where()方法,当cd列不等于"A"时,将对应qty值转为NaN,后续计算平均值时会自动排除这些无效值。
  3. 高效计算:直接用mean(axis=1)按行计算平均值,避免了apply()逐行循环的低效问题,尤其适合大规模数据集。

你之前方法出错的可能原因

用apply()加if语句时,大概率是这两个问题:

  • 判断条件有误:比如把数据里的0当成字符串处理,但实际是数值类型,导致判断不生效,没收集到符合条件的值;
  • 空列表处理不当:如果代码默认在无符合条件值时返回0,且逻辑错误导致所有行都没收集到有效数据,就会出现全0的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:50:14