如何用Pandas无循环切片或分组连续行?附示例
无需循环实现Pandas连续值分组的方法
完全不需要循环,用Pandas的内置方法就能轻松搞定这个连续数值的分组需求,具体步骤如下:
首先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({'col1': [3,4,11,12,13,23,25,26,27]})
然后通过以下代码直接得到目标结果:
# 生成分组标识:判断当前值与前一个值的差是否大于1,累计求和得到分组ID group_ids = df['col1'].diff().fillna(1).gt(1).cumsum() # 按分组ID聚合,将每组转为元组,再转成列表 list_of_consc_rows = df.groupby(group_ids)['col1'].agg(tuple).tolist()
执行后得到的结果就是你想要的:
[(3, 4), (11, 12, 13), (23,), (25, 26, 27)]
步骤解释
df['col1'].diff():计算当前值与前一行值的差值,第一行因无前置值结果为NaN.fillna(1):把第一行的NaN替换为1,保证后续判断逻辑统一.gt(1):判断差值是否大于1,大于1说明数值断开,标记为True,否则为False.cumsum():对布尔值累计求和,True被当作1、False当作0,以此将连续数值归到同一组- 最后用
groupby按分组ID聚合,把每组数值转成元组再转成列表即可完成操作
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

