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

如何用Pandas的iloc获取索引列表?求更优Pandas实现方案

嘿,针对你想要给每行生成包含从起始行到当前行索引列表的需求,确实有更贴合Pandas特性的实现方式,完全不用手动写循环折腾~

先聊聊你找到的解决方案

你提到的@wen的方法非常巧妙,用Pandas的字符串累加操作就搞定了,我再给你拆解下逻辑,方便理解:

data['ind'] = data.index.astype(str) + ','
data['cumsum_indexes'] = data['ind'].cumsum().str[:-1].str.split(',')
  • 第一步把索引转成字符串并加逗号,是为了后续累加后能轻松分割成独立的索引项;
  • cumsum()会逐行累加前面的索引字符串,比如第二行就会变成 "0," + "1," = "0,1,";
  • 最后用str[:-1]去掉末尾多余的逗号,再通过str.split(',')转成列表,就完美得到了每行对应的索引列表。

另一种更直观的原生方法

如果你觉得字符串操作有点绕,也可以用apply结合索引切片来实现,逻辑更直白:

data['cumsum_indexes'] = data.apply(lambda row: data.index[:row.name+1].tolist(), axis=1)

这里row.name就是当前行的索引值,直接取从开头到当前索引的切片,再转成列表就行,代码可读性拉满,不过要注意:在超大数据集上,apply的效率会略低于上面的字符串累加方法。

顺带提下你最初代码的小问题

你原来写的代码有几个语法细节需要修正:

  • 要把series_data = [] for count,x in enumerate(df):拆成两行,不然会触发语法错误;
  • df['up_to_row'].iloc(count)应该改成df['up_to_row'].iloc[count](Pandas的iloc是用方括号取值的);
  • 最重要的是:手动循环在处理大数据集时,效率远不如Pandas的矢量操作,所以更推荐上面的两种原生方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:02:59