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

如何在Pandas中按条件筛选指定行(含示例场景)

实现Pandas筛选目标行及其下一行的方法

当然有办法实现这个需求啦!针对你提到的场景,我整理了几种实用的Pandas操作方案,你可以根据自己的实际情况选择:

先准备测试用的DataFrame

首先咱们先把你给出的数据转换成Pandas DataFrame,方便后续操作:

import pandas as pd

data = {
    'Date': ['2018-04-08 13:40:00', '2018-04-08 13:41:00', '2018-04-08 13:42:00', '2018-04-08 13:43:00'],
    'Value': [0.001, 5.000, 16.670, 18.670],
    'PercentageDifference': [0.000000, 4999.000000, 2.334000, 0.119976]
}

df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])  # 把日期列转为datetime类型,后续操作更灵活

方法一:布尔索引 + shift()(推荐,适配单/多个目标行)

这个方法通过标记目标行和它的下一行来筛选,逻辑清晰且通用性强:

# 生成筛选掩码:标记Value=0.001的行,以及它的下一行
mask = (df['Value'] == 0.001) | (df['Value'].shift(1) == 0.001)

# 应用掩码得到结果
result = df[mask]
print(result)

原理说明

  • df['Value'] == 0.001:直接定位到所有Value等于0.001的行
  • df['Value'].shift(1) == 0.001:shift(1)会把上一行的Value值移到当前行,所以这个条件能定位到目标行的下一行
  • 用|(或运算符)合并两个条件,就能同时选中目标行和它的下一行

方法二:索引定位(适合单目标行场景)

如果你的DataFrame里只有一个Value=0.001的行,可以直接通过索引来提取:

# 找到目标行的索引
target_idx = df[df['Value'] == 0.001].index[0]

# 提取目标行和下一行
result = df.loc[[target_idx, target_idx + 1]]
print(result)

注意:如果有多个目标行,这个方法需要循环处理每个索引,不如方法一高效。

方法三:numpy.roll(批量处理多目标行,避免边界误判)

如果你的DataFrame里有多个Value=0.001的行,且担心最后一行是目标行时出现误标记,可以用numpy的roll函数:

import numpy as np

# 标记所有Value=0.001的行
target_rows = df['Value'] == 0.001
# 把标记数组向后滚动一位,定位到目标行的下一行
next_rows = np.roll(target_rows, 1)
# 合并筛选条件
mask = target_rows | next_rows

# 处理边界情况:如果最后一行是目标行,roll会把标记移到第一行,这里手动修正
if target_rows.iloc[-1]:
    mask.iloc[0] = False

result = df[mask]
print(result)

最终输出结果

不管用哪种方法,你都会得到想要的结果:

Date  Value  PercentageDifference
0 2018-04-08 13:40:00  0.001                0.0000
1 2018-04-08 13:41:00  5.000             4999.0000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:22