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

Python Pandas:循环生成移动平均列时列名命名错误修正求助

修正后的代码及问题说明

原代码存在两个关键问题:

  • return frame被错误地放在了内层循环中,导致函数仅处理第一个列的第一个移动窗口后就直接返回,后续的列和窗口计算完全没有执行。
  • 若实际生成的列名是原列名+字典值(如A5),说明代码中可能误将拼接字段写成了value而非key,需要确认列名拼接逻辑是col + '_' + key。

修正后的完整代码:

import pandas as pd
import numpy as np

toy_df = pd.DataFrame(data=np.random.rand(50,4), columns = ('Time', 'A', 'B' ,'C'))
window_size = {'ma_5': 5, 'ma_4': 4, 'ma_3': 3, 'ma_2': 2, 'ma_1': 1}

def calculate_ma(frame):
    # 遍历除Time外的所有列
    for col in frame.columns.drop('Time'):
        # 遍历每个窗口配置
        for key, value in window_size.items():
            # 按「原列名_字典键」格式生成新列名,并计算移动平均
            frame[f"{col}_{key}"] = frame[col].rolling(window=value).mean()
    # 所有计算完成后再返回DataFrame
    return frame

# 调用函数并查看结果
result_df = calculate_ma(toy_df)
print(result_df.columns)

修正点说明

  1. 调整return语句位置:将return frame移到外层循环之外,确保所有列和窗口的移动平均计算完成后再返回结果。
  2. 明确列名拼接逻辑:使用f-string(f"{col}_{key}")更清晰地生成原列名_字典键格式的列名,避免字符串拼接错误。
  3. 简化窗口字典定义:直接在字典中定义窗口大小,无需单独定义变量,让代码更简洁。

运行修正后的代码后,生成的列名将符合预期(如A_ma_5、B_ma_3等),且所有列的所有窗口移动平均都会被正确计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:17:40