python - 为索引连续 +/-1 的所有行过滤 pandas 数据帧

标签 python pandas indexing

我有一个大数据框,我只需要用一个索引与另一个索引连续的数据创建一个新的数据框。 例如:

import pandas as pd
import numpy as np
indexer = [0,1,3,5,6,8,10,12,13,17,18,20,22,24,25,26]
df  = pd.DataFrame(range(50,66), index=indexer, columns = ['A'])

所以在这种情况下所需的输出是:

     A
0   50
1   51
5   53
6   54
12  57
13  58
17  59
18  60
24  63
25  64
26  65

在 pandas 中有快速的方法吗?还是需要在每一行上使用某种循环和函数来完成?

最佳答案

您无法移动索引,因此您首先需要重置它。然后使用 loc 操作,同时测试上移和下移。请记住将您的索引设置回原来的位置。

df.reset_index(inplace=True)
>>> df.loc[(df['index'] == df['index'].shift(1) + 1) 
           | (df['index'] == df['index'].shift(-1) - 1), :].set_index('index')
        A
index    
0      50
1      51
5      53
6      54
12     57
13     58
17     59
18     60
24     63
25     64
26     65

关于python - 为索引连续 +/-1 的所有行过滤 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849355/

相关文章:

python - 如何在数据框中删除所需列中缺少数据的记录?

python - 选择 pandas 中 value = 1 的列名称

javascript - 在二维数组中动态创建索引

mysql - InnoDB 复合索引顺序和 INSERT 性能

python - 当安装了两个 python 版本时,如何让 scrapy 使用 python 3?

python - For循环只打印Python中的最后一个元素

python - Python 避免深度嵌套函数调用

python - 如何使用 pandas 或其他方式在 python 中拆分 CSV 文件中的值?

python - 将元素列表映射到 pandas 中的元素类别?

sql - 带排除项的 PostgreSQL 唯一约束