首页 > 解决方案 > 如何使用 pandas group-by 仅对后续/不间断的元素进行分组?

问题描述

如果我在下面的示例中执行 groupby,我将获得所有带有“A”的条目的总和。我只想总结不间断的、随后出现的“A”。这可能与 groupby 吗?还有另一种方法可以做到这一点吗?

我已经通过使用一些自定义循环来解决它,但是太慢了。

pandas as pd
foo = pd.DataFrame({'bar':['A','A','B','A','A','A','C'],'foobar': [1,2,3,4,5,6,7]})
foo.groupby('bar').sum()

A 的总和现在的输出是 18。我想要 A1 = 3、B = 3、A2 = 15 等的总和。

标签: pandaspandas-groupby

解决方案


我终于找到了解决方案:

foo = pd.DataFrame({'bar':['A','A','B','A','A','A','C'], 'foobar': [1,2,3,4,5,6,7]}) 
foo['group_index'] = (foo['bar'] != foo['bar'].shift()).cumsum() 
foo.groupby(['bar', 'group_index']).sum() 

希望这对其他人有帮助。


推荐阅读