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

如何在Pandas中按索引选取一行并获取后续若干行?

解决方法:按时间戳索引选取起始行及后续若干行

其实有几种简单直观的方法可以实现这个需求,我来给你逐一拆解:

方法1:用loc标签切片 + head()(最简洁推荐)

因为你的索引是有序的时间戳,loc支持直接从目标时间戳开始做标签切片,再用head(N)截取前N行,完美匹配你的需求:

import pandas as pd

# 假设你的DataFrame名为df,定义目标时间戳
target_ts = pd.Timestamp('2018-01-12')
# 选取从target_ts开始的2行
result = df.loc[target_ts:].head(2)

这个方法的优势:

  • 代码简洁易读,逻辑一目了然
  • 如果目标时间戳不存在于索引中,会自动从第一个大于等于该时间戳的行开始选取(适合需要容错的场景)
  • 完整保留时间索引的标签信息

方法2:获取索引位置后用iloc切片

如果你需要严格基于存在的时间戳位置操作(比如确认目标时间戳一定在索引里),可以先拿到目标时间戳的位置,再用iloc做位置切片:

target_ts = pd.Timestamp('2018-01-12')
# 获取目标时间戳在索引中的位置
start_pos = df.index.get_loc(target_ts)
# 从该位置开始取2行
result = df.iloc[start_pos : start_pos + 2]

⚠️ 注意:如果目标时间戳不在索引中,get_loc()会抛出KeyError,使用前可以先判断target_ts in df.index。若要处理不存在的情况,可改用df.index.get_indexer([target_ts])[0],它会返回-1表示未找到,你可以据此做容错处理。

方法3:布尔索引筛选 + head()

这种方法通过布尔条件筛选出所有晚于等于目标时间戳的行,再取前N行,灵活性很高:

target_ts = pd.Timestamp('2018-01-12')
# 筛选索引 >= target_ts的行,再取前2行
result = df[df.index >= target_ts].head(2)

和方法1类似,它也能自动处理目标时间戳不存在的情况,返回第一个符合条件的行开始的N行。

额外小贴士

  • 确保你的索引是datetime64类型,而非字符串类型,否则时间切片可能无法正常工作。可以用df.index = pd.to_datetime(df.index)进行转换。
  • 如果索引中有重复的时间戳,get_loc()会返回一个布尔数组,此时可以用df.index.get_indexer([target_ts])[0]获取第一个匹配的位置,或者根据需求处理重复值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:41