首页 > 解决方案 > 按索引值将 pandas Series 拆分为连续的块

问题描述

我正在尝试将一个系列拆分为多个部分,其中每个部分都是连续的并且具有相同的索引。所以对于这个输入:

df = pd.Series([1,2,3,4,5,6,7], index=[1,1,1,2,2,1,1])

所需的结果将是三个块,例如:

[[1,2,3], [4,5], [6,7]]

我试图使用groupby,但是将 [1,2,3] 和 [6,7] 分组到一个部分中,这是不希望的,因为它们不连续:

>>> groups = list(df.groupby(df.index, sort=False))
>>> len(groups)
2

这可以在 Pandas(或 Numpy)中完成吗?

标签: pythonpandasnumpypandas-groupby

解决方案


你可以

In [761]: [v.tolist() for _, v in df.groupby(df.index.to_series().diff().ne(0).cumsum())]
Out[761]: [[1, 2, 3], [4, 5], [6, 7]]

细节

获取后续块。

In [762]: df.index.to_series().diff().ne(0).cumsum()
Out[762]:
1    1
1    1
1    1
2    2
2    2
1    3
1    3
dtype: int32

推荐阅读