You need to enable JavaScript to run this app. 如何在Python循环中使用变量列名创建新列并解决分组均值计算覆盖问题
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python循环中使用变量列名创建新列并解决分组均值计算覆盖问题

问题原因

原有代码的问题在于内层循环中直接对newCols的整列赋值,每一轮循环都会覆盖上一轮pad的计算结果,最终只保留最后一个pad的数据;同时代码存在变量名错误:计算得到的均值存储在value_mean变量中,赋值时错误使用了未定义的direct_mean,会触发运行报错。

解决方案

推荐方案:使用pandas内置方法实现(无需手动写循环)

直接用pivot_table做分组聚合+宽表转换,一行代码即可得到目标结果,逻辑简洁性能更高:

import pandas as pd

# 按pad分组、fiscal_week转列、聚合value均值,列名添加FW前缀
result = pd.pivot_table(
    df,
    index='pad',
    columns='fiscal_week',
    values='value',
    aggfunc='mean'
).add_prefix('FW').reset_index()

# 若某pad在某财周无数据,可按需添加.fillna(数值)替换空值,比如.fillna(0)

手动循环修改方案

如果需要保留循环逻辑,可调整为预先初始化pad列,再按pad匹配填充各财周均值,避免覆盖:

unique_week = sorted(df['fiscal_week'].unique())
# 先初始化结果表,写入所有唯一pad名称
result = pd.DataFrame({'pad': df['pad'].unique()})

for week_number in unique_week:
    new_colname = f'FW{week_number}'
    # 计算当前财周各pad的均值
    week_mean = df[df['fiscal_week'] == week_number].groupby('pad')['value'].mean().reset_index(name=new_colname)
    # 按pad合并到结果表,保留所有pad的行
    result = result.merge(week_mean, on='pad', how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:12:03