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

多币种收盘价同时计算移动平均线报错问题求助

问题原因

你遇到的ValueError是因为forex_data_1['Close']包含多列(对应AUDUSD=X、EURUSD=X等不同币种的收盘价),调用rolling(window=30).mean()后返回的是多列DataFrame,但你试图将其赋值给一个名为Moving average的单列,数据结构不匹配导致报错。

解决方案

方案1:为每个币种单独生成移动均线列(保留宽表结构)

如果想维持原有的宽表格式,给每个币种的收盘价对应生成一列均线,可以通过添加后缀的方式命名新列,再合并回原DataFrame:

# 计算所有币种的30日均线,为新列添加"_MA30"后缀
ma_data = forex_data_1['Close'].rolling(window=30).mean().add_suffix('_MA30')
# 将均线数据合并到原DataFrame中
forex_data_1 = forex_data_1.join(ma_data)

执行后会生成AUDUSD=X_MA30、EURUSD=X_MA30这类列,分别对应每个币种的30日均线。

方案2:转长表后统一计算均线(适合按币种分析)

如果希望把所有币种的收盘价和均线放在同一列(长表格式),方便后续按币种做可视化或分析,可以先将宽表转成长表,再分组计算均线:

# 将宽表转成长表:新增"Currency"列标记币种,"Close"列统一存储收盘价
long_data = forex_data_1.melt(
    id_vars=['Date'],  # 假设你的DataFrame有Date列作为时间标识
    value_vars=forex_data_1['Close'].columns,
    var_name='Currency',
    value_name='Close'
)
# 按币种分组,计算每组的30日均线
long_data['Moving average'] = long_data.groupby('Currency')['Close'].rolling(window=30).mean().reset_index(level=0, drop=True)

转长表后,每条记录对应一个币种的单日收盘价及对应均线,结构更规整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:02