如何在Python中按列分组统计列中连续重复前项的次数?
在Python中按组统计连续重复状态的计数
可以用Pandas的分组和序列操作实现这个需求,以下是完整代码示例:
import pandas as pd # 构造示例数据 data = { 'Group': ["AGroup", "AGroup", "AGroup", "AGroup", "BGroup", "BGroup", "BGroup", "BGroup", "CGroup", "CGroup", "CGroup", "CGroup"], 'Status': ["Low", "Low", "High", "High", "High", "Low", "High", "Low", "Low", "Low", "High", "High"] } df = pd.DataFrame(data) # 生成目标列 CountByGroup df['CountByGroup'] = df.groupby('Group')['Status'].apply( lambda x: x.ne(x.shift()).cumsum().groupby(x.ne(x.shift()).cumsum()).cumcount() + 1 ) # 输出结果 print(df.to_string(index=False))
运行后输出结果与示例完全一致:
Group Status CountByGroup AGroup Low 1 AGroup Low 2 AGroup High 1 AGroup High 2 BGroup High 1 BGroup Low 1 BGroup High 1 BGroup Low 1 CGroup Low 1 CGroup Low 2 CGroup High 1 CGroup High 2
代码逻辑拆解
- 按Group独立分组:以
Group列作为分组依据,保证每个组内的统计互不干扰 - 标记连续重复块:
x.ne(x.shift())判断当前行Status是否与上一行不同,返回布尔序列;通过cumsum()累加,将连续相同的Status标记为同一个分组ID - 生成连续计数:基于上述分组ID再次分组,用
cumcount()+1在每个连续块内生成从1开始的递增计数(cumcount()默认从0起始,加1后符合需求的起始规则)
内容的提问来源于stack exchange,提问作者GM01
相关产品推荐
相关产品推荐

