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

如何遍历多列并计算多ETF的ATR相关指标最大值?

批量生成ETF的ATR最大值列方案

思路说明

你的DataFrame里,同一ETF的high_low、high_close、low_close三组数据列名完全重复,所以可以先提取所有唯一的ETF名称,再针对每个ETF筛选出对应的三列,逐行取最大值生成新列,这种逻辑可以无缝扩展到50只ETF的场景。

基础循环实现版

假设前50列的列名就是各ETF的名称,直接提取后遍历处理:

import pandas as pd
import numpy as np

# 获取所有唯一的ETF名称(前50列是每个ETF的high_low列,列名即ETF名称)
etf_list = df.columns[:50].tolist()

# 遍历每个ETF生成最大值列
for etf_name in etf_list:
    # 筛选当前ETF的三列数据
    target_cols = df[df.columns == etf_name]
    # 逐行取最大值,生成命名为"Max [ETF名]"的新列
    df[f"Max {etf_name}"] = target_cols.max(axis=1)

高效批量处理版(适合大规模数据)

如果处理50只ETF,用groupby按列名分组批量计算能避免循环开销,效率更高:

# 按列名分组,每组对应一个ETF的三列数据
etf_groups = df.groupby(df.columns, axis=1)
# 对每组取最大值,并重命名列为"Max [ETF名]"
max_columns = etf_groups.max().rename(lambda col: f"Max {col}", axis=1)
# 将最大值列合并到原DataFrame
df = pd.concat([df, max_columns], axis=1)

关键细节

  • 因为同一ETF的三组数据列名完全一致,groupby(df.columns, axis=1)会自动把同名列归为一组,正好对应每个ETF的三组计算值。
  • 两种方法都不需要针对ETF数量修改核心逻辑,3只和50只的处理方式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:35:29