单线:
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]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)