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

如何在Pandas DataFrame中仅保留索引连续的行

解决方法:筛选索引存在连续相邻值的DataFrame行

你可以利用Pandas的向量化操作高效实现需求,无需手动循环,代码更简洁且性能更优:

步骤说明

  • 计算索引的相邻差值,判断当前索引与前/后索引是否连续(差值为1)
  • 标记出属于连续序列的行,最终筛选这些行

代码示例

假设你的DataFrame名为df,执行以下代码:

import pandas as pd

# 构造示例数据(与你提供的一致)
data = {
    'Timestamp': ['2022-03-01T16:28:50.4580078Z', '2022-03-01T17:26:25.8170166Z',
                  '2022-03-01T17:26:45.8480072Z', '2022-03-01T17:27:05.8800048Z',
                  '2022-03-01T18:23:10.9630126Z', '2022-03-01T18:36:12.1380004Z',
                  '2022-03-01T18:36:32.1690063Z', '2022-03-01T18:37:52.2950134Z'],
    'Value': [36.000, 37.500, 41.000, 35.250, 36.000, 42.000, 37.000, 34.500]
}
df = pd.DataFrame(data, index=[316, 344, 345, 346, 374, 387, 388, 391])

# 计算当前索引与前一个/后一个索引的连续情况
is_continuous_with_prev = df.index.to_series().diff() == 1
is_continuous_with_next = df.index.to_series().diff(-1) == -1

# 标记需要保留的行:与前一行连续 或 与后一行连续
keep_rows = is_continuous_with_prev | is_continuous_with_next

# 筛选得到结果
result_df = df[keep_rows]
print(result_df)

输出结果

Timestamp   Value
344 2022-03-01T17:26:25.8170166Z  37.500
345 2022-03-01T17:26:45.8480072Z  41.000
346 2022-03-01T17:27:05.8800048Z  35.250
387 2022-03-01T18:36:12.1380004Z  42.000
388 2022-03-01T18:36:32.1690063Z  37.000

原理说明

  • df.index.to_series().diff():计算当前索引与前一个索引的差值,等于1则说明和前一行索引连续
  • df.index.to_series().diff(-1):计算当前索引与后一个索引的差值,等于-1则说明和后一行索引连续
  • 用逻辑或|合并两个条件,得到所有属于连续序列的行,最终筛选即可

这种方法避免了手动循环的繁琐,同时借助Pandas内部优化,处理大数据集时效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:31