python - 按索引值将 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)中完成吗?
解决方案
你可以
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
推荐阅读
- android - 我的移动应用在 Google Play 商店中是免费的还是付费的?
- git - 如何启用自定义合并驱动程序 - GitHub 中的 .gitattributes
- javascript - 如何使用按钮清除语义 UI React 中的多选下拉菜单?
- tsql - JOIN 中的 SELECT WHERE 语句
- ifc - 如何获得 IFC 窗台高度
- c# - 如何使用 Gmail 在 C# 中安排电子邮件?
- string - 我如何获得随机选择的字符串名称并仍然选择现有的子字符串而不以文本形式出现代码
- react-native - React Native 没有连接到 socket.io
- django - GeoDjango 获取到给定位置集的任何点的给定距离内的模型的所有记录
- regex - 如何重复正则表达式组直到字符串结束