在熊猫数据框中查找连续的片段

在熊猫数据框中查找连续的片段,第1张

熊猫数据框中查找连续的片段

单线

df.reset_index().groupby('A')['index'].apply(np.array)

代码例如:

In [1]: import numpy as npIn [2]: from pandas import *In [3]: df = Dataframe([3]*4+[4]*4+[1]*4, columns=['A'])In [4]: dfOut[4]:    A0   31   32   33   34   45   46   47   48   19   110  111  1In [5]: df.reset_index().groupby('A')['index'].apply(np.array)Out[5]:A1    [8, 9, 10, 11]3      [0, 1, 2, 3]4      [4, 5, 6, 7]

您还可以直接从groupby对象访问信息:

In [1]: grp = df.groupby('A')In [2]: grp.indicesOut[2]:{1L: array([ 8,  9, 10, 11], dtype=int64), 3L: array([0, 1, 2, 3], dtype=int64), 4L: array([4, 5, 6, 7], dtype=int64)}In [3]: grp.indices[3]Out[3]: array([0, 1, 2, 3], dtype=int64)

要解决DSM提到的情况,您可以执行以下 *** 作:

In [1]: df['block'] = (df.A.shift(1) != df.A).astype(int).cumsum()In [2]: dfOut[2]:    A  block0   3      11   3      12   3      13   3      14   4      25   4      26   4      27   4      28   1      39   1      310  1      311  1      312  3      413  3      414  3      415  3      4

现在,将这两列进行分组并应用lambda函数:

In [77]: df.reset_index().groupby(['A','block'])['index'].apply(np.array)Out[77]:A  block1  3          [8, 9, 10, 11]3  1 [0, 1, 2, 3]   4        [12, 13, 14, 15]4  2 [4, 5, 6, 7]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5643762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存