如何按 Pandas 中索引 +1 的索引分组

How can I group by index with index +1 in Pandas

df = pd.DataFrame({'index': [1, 2, 3, 69, 70, 71, 458, 459, 460],
                   'Animals': ['alligator', 'bee', 'falcon', 'lion',
                   'monkey', 'parrot', 'shark', 'whale', 'zebra'],})
df

这是我的 DataFrame。我想 groupby “索引”列,其中索引为 1、2、3 的前 3 只动物归为一组。编号为 69、70、71 的动物进入下一组,依此类推。

最后我想在索引列中有 3 个由连续值组成的组。

好消息是列索引中的数字始终是 +1,然后是大于 1 的间隙,但绝不会只是 +1

我相信它应该存在一些功能。

IIUC,您想根据差异是否为 1 对行进行分组?您可以使用 diff + ne + cumsum 创建不同的组,groupby 这些组并使用 agg 创建列表:

out = df.groupby(df['index'].diff().ne(1).cumsum()).agg(list).reset_index(drop=True)

输出:

             index                   Animals
0        [1, 2, 3]  [alligator, bee, falcon]
1     [69, 70, 71]    [lion, monkey, parrot]
2  [458, 459, 460]     [shark, whale, zebra]

这些问题的解决方案总是与前一行进行比较,然后对真值求和。

所以也许是这样的:

df['index'].diff().ne(1).cumsum()