根据列值拆分数据框

根据列值拆分数据框,第1张

根据列值拆分数据

首先,您可以通过将值列与零进行比较来创建组号,然后对这些布尔值求和

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)}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存