如何在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
相关产品推荐
相关产品推荐

