首先,您可以通过将值列与零进行比较来创建组号,然后对这些布尔值求和。
df['group_no'] = (df.val == 0).cumsum()>>> df.head(6) EndDate val group_no0 2007-10-31 0.000000 11 2007-11-30 -0.033845 12 2007-12-31 -0.033630 13 2008-01-31 -0.009449 14 2008-02-29 0.000000 25 2008-03-31 -0.057450 2
接下来,您可以结合使用字典理解
loc来选择相关的
group_no数据框。为了获得最后的组号,我得到了
iat用于基于位置的索引的最后一个值。
d = {i: df.loc[df.group_no == i, ['EndDate', 'val']] for i in range(1, df.group_no.iat[-1])}>>> d{1: EndDate val 0 2007-10-31 0.000000 1 2007-11-30 -0.033845 2 2007-12-31 -0.033630 3 2008-01-31 -0.009449, 2: EndDate val 4 2008-02-29 0.000000 5 2008-03-31 -0.057450 6 2008-04-30 -0.038694, 3: EndDate val 7 2008-05-31 0.000000 8 2008-06-30 -0.036245 9 2008-07-31 -0.005286}
编辑 正如@DSM所建议的,基于具有15k行的示例数据帧,使用groupby的速度似乎快6倍。
d = {n: df2.ix[rows] for n, rows in enumerate(df2.groupby('group_no').groups)}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)