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

如何通过循环基于多组索引列表选取pandas DataFrame对应行

pandas循环按多组索引筛选行实现方案

核心逻辑是先把分散的多组索引列表归集到可遍历的容器(列表/字典)中,循环时每次取出一组索引,用pandas原生的行选择语法筛选子集,再在循环内执行你的自定义处理逻辑即可。

基础实现(无分组标识场景)

把所有索引列表按顺序存入一个大列表,直接遍历即可,适合不需要标记当前索引组名称的场景:

import pandas as pd

# 原数据与索引定义
data_ = {'Number_a': [12, 13, 14,15,16,17],'Number_b':[11,11,11,12,12,12],'Number_c': [10,5,4,3,2,1]}
data = pd.DataFrame(data=data_)

idx1= [0,2,4]
idx2=[1,3,5]
idx3 = []  # 替换为你的第三组索引内容

# 归集所有待使用的索引列表,后续新增索引组直接追加到这个列表里即可
all_idx_groups = [idx1, idx2, idx3]

# 循环处理
for round_num, current_idx in enumerate(all_idx_groups, start=1):
    # 筛选对应行:如果索引存的是显式索引值用.loc,如果是行位置序号用.iloc
    sub_df = data.loc[current_idx].copy()
    # 以下写循环内的自定义处理逻辑即可
    print(f"第{round_num}轮筛选结果:")
    print(sub_df)
    # 示例:process_func1(sub_df)、process_func2(sub_df) ...

带分组标识的实现

如果需要在处理时明确当前对应的索引组名称(比如做结果标记、日志输出),可以用字典存储索引组名和对应索引列表的映射关系:

# 按组名归集索引
idx_group_map = {
    "奇数位置行索引": idx1,
    "偶数位置行索引": idx2,
    "第三组自定义索引": idx3
}

for group_name, current_idx in idx_group_map.items():
    sub_df = data.loc[current_idx].copy()
    print(f"当前处理分组:{group_name}")
    # 自定义处理逻辑

注意事项

  • 索引匹配规则:如果你的索引列表里存的是DataFrame的显式索引值(比如给df设过name、id类的非0起始索引),用data.loc[索引列表]选行;如果存的是从上到下的行位置序号(0、1、2...),用data.iloc[索引列表]选行,避免匹配错误。
  • 筛选子集后如果要做赋值、修改操作,务必加.copy(),否则会触发pandas的SettingWithCopyWarning,还可能出现修改子集时意外改动原DataFrame数据的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:09:30