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

如何在Python中根据嵌套列表的索引范围提取DataFrame行?

实现方法

当然有简洁的实现方式,核心思路是把每个子列表的起止范围转换成连续整数序列,再合并所有序列。以下是几种常用方案:

方法1:使用itertools.chain + range

借助itertools.chain快速合并多个连续序列,代码简洁且效率不错:

import itertools
import pandas as pd

df = pd.DataFrame({'x': [0,1,2,3,4,5,6,7]})
a = [[2,4], [6,7]]

# 展开索引:每个子列表转成包含两端的连续序列,再合并
indices = list(itertools.chain.from_iterable(range(start, end+1) for start, end in a))
# 提取目标行
result_df = df.loc[indices]

注:range(start, end)是左闭右开区间,所以要给end加1才能包含子列表的右端点(比如4和7)。

方法2:使用numpy.arange

如果习惯用numpy处理数值序列,这种方式也很直观:

import numpy as np
import pandas as pd

df = pd.DataFrame({'x': [0,1,2,3,4,5,6,7]})
a = [[2,4], [6,7]]

# 生成多个连续数组并拼接,再转成列表
indices = np.concatenate([np.arange(start, end+1) for start, end in a]).tolist()
result_df = df.loc[indices]

方法3:纯列表推导式(无需额外库)

如果不想引入第三方库,嵌套列表推导式就能搞定:

import pandas as pd

df = pd.DataFrame({'x': [0,1,2,3,4,5,6,7]})
a = [[2,4], [6,7]]

indices = [num for start, end in a for num in range(start, end+1)]
result_df = df.loc[indices]

额外优化:处理起止顺序不确定的情况

如果子列表里的起止可能颠倒(比如出现[4,2]这种情况),可以用min和max兼容:

indices = [num for s, e in a for num in range(min(s,e), max(s,e)+1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:32:41