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

如何按symbol分组对DataFrame应用bbands函数并新增列?

解决方案

核心问题分析

直接用groupby.apply调用ta.bbands会返回包含多列的DataFrame,与原DataFrame的列结构不匹配,导致赋值报错。需要在分组内仅提取目标列,返回Series以保证索引对齐。

完整代码实现

import pandas as pd
import pandas_ta as ta

# 假设你的DataFrame名为df
df['bbm'] = df.groupby('symbol')['close'].apply(
    lambda x: x.ta.bbands(length=20, std=2)['BBM_20_2.0']
)

代码细节说明

  1. 独立分组计算:按symbol分组,确保每个标的的布林带计算互不干扰。
  2. 精准提取目标列:在apply的匿名函数中,仅对每组的close列调用布林带计算,并直接提取返回结果中的BBM_20_2.0(布林带中轨)列,返回Series类型。
  3. 自动索引对齐:返回的Series保留了原DataFrame的索引,赋值时会自动与原数据行一一对应,无需额外合并操作。

结果验证

执行后原DataFrame会新增bbm列,每个symbol的前19行值为NaN(因布林带需要20个周期数据初始化),后续行则为对应标的的布林带中轨值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:10:30