python - 如何识别数据框中具有连续索引的子集

标签 python pandas dataframe indexing

我有一个定义如下的数据框:

df = pd.DataFrame({'A':[5,8,96,3,5,41,2,45,7,8], 'B':[1,2,3,5,6,10,11,12,13,18]})
df = df.set_index('B')
df.index.name = None

我的目标是为具有连续索引的数据帧子集分配一个值,如下所示:

enter image description here

算法:正如您从图像中看到的那样,前 3 行的索引为 1、2、3,它们增加 1(因此是连续的)。因此,我将 C 列中的值 0 分配给该子集。 第二个子集由具有连续索引 5 和 6 的行组成(注意没有索引 4!)。因此,我在 C 列中为它们分配了值 1。

问题:您知道实现这样的结果的高效且智能的方法吗?我能够通过使用大量 for 循环和 ifs 来实现这样的结果,但它非常讨厌。

最佳答案

您可以将diffcumsum 一起使用;计算diff,检查它是否等于1(连续条件)然后cumsum(计数)非连续跳跃:

df['C'] = df.index.to_series().diff().ne(1).cumsum().sub(1) 

df
#     A  C
#1    5  0
#2    8  0
#3   96  0
#5    3  1
#6    5  1
#10  41  2
#11   2  2
#12  45  2
#13   7  2
#18   8  3

关于python - 如何识别数据框中具有连续索引的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723114/

相关文章:

python - pandas.DataFrame 中的 NaN 不打印到 Excel

python - 编辑两个 Pandas 列之间的距离

python - Pandas 数据框 : Find consecutive values and ignoring gaps of certain size

删除嵌套在数据框列表中的列标题内的句点和空格

python - 使用 Python/Selenium 访问 iframe 中的链接并获取 url

python - 访问存储在 pandas dataframe 中的数组

python - 根据变量调用方法的方法?

python - 在 Python 中用索引替换列表中的值

python-2.7 - 如何处理在每个单元格中都有一个字典列表的 Pandas 列

python - pandas dataframe 基于另一个包含名称列的文件创建一个新的二进制事件列