我有一列包含值列表,如下所示:
100
200
300
500
600
650
1000
我想做一个Groupby
(或类似的有效构造)以获取每行值在范围内的批量行100
最后一行的。
在这种情况下,上面示例中生产的批次将是
100, 200, 300
,
500, 600, 650
1000
这可以在 Pandas 中做到吗?由于 Pandas 尝试允许类似 SQL 的查询,我猜它应该是这样。
您可以使用类似于答案中描述的方法这个问题 https://stackoverflow.com/questions/14358567/finding-consecutive-segments-in-a-pandas-data-frame。这基本上是一个三步过程:
- Use
shift
计算要区分的行间标准。
- Use
cumsum
将此标准相加,创建一个新系列,其中每个组具有单个值的单独“块”。
- 小组讨论这个新系列。
这是一个例子:
>>> x = pandas.Series([100, 200, 300, 500, 600, 650, 1000, 900, 750])
>>> x.groupby(((x - x.shift()).abs() > 100).cumsum()).apply(list)
0 [100, 200, 300]
1 [500, 600, 650]
2 [1000, 900]
3 [750]
dtype: object
请注意,我使用了标准> 100
,这与<= 100
你提到的标准。使用这种方法,您需要使用以下标准:分离组,而不是加入它们的标准,因此您必须使用分组标准的否定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)