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

Pandas查找DataFrame每列最大值位置的for循环改apply()报AttributeError如何解决

问题原因与解决方案

错误根因

你当前遇到的报错是冗余的apply改写带来的变量对齐问题,而且apply本质还是带语法糖的串行循环,和你原始的for循环性能几乎没有差异,无法解决大量数据下的耗时问题。

最优性能修复方案

直接调用Pandas DataFrame原生的向量化idxmax()方法,无需循环也无需apply,性能至少提升1~2个量级,同时彻底避免报错,且完全兼容你原有函数的返回格式:

import pandas as pd

def FindPosition_max(series_max, txt_name):
    col_count = len(series_max)
    # 读取csv逻辑和原有逻辑完全一致
    time_history = pd.read_csv(
        txt_name, 
        skiprows=col_count+7, 
        header=None, 
        usecols=range(1, col_count+1)
    )[:-2]
    
    # axis=0表示按列计算,直接返回每列最大值对应的行索引,返回的Series索引就是对应列名
    row_index_series = time_history.idxmax(axis=0)
    # 对齐你原来的返回格式:行索引列表、列索引列表
    return row_index_series.tolist(), row_index_series.index.tolist()

原有apply写法的报错修复(不推荐,仅做问题说明)

如果你非要保留apply写法,只需显式对齐列名类型即可,报错大概率是pd.Series(series_max.index)生成的Series值和time_history的列名类型不匹配导致的:

def FindPosition_max(series_max, txt_name):
    time_history = pd.read_csv(txt_name, skiprows=len(series_max)+7, header=None, usecols=range(1,len(series_max)+1))[:-2]    
    col_index = series_max.index.tolist()
    # 显式传入列名列表,避免索引类型匹配问题
    row_index = pd.Series(col_index).apply(lambda x: time_history[x].idxmax())
    return row_index.tolist(), col_index

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:45:01