如何用Pandas为连续相同行添加连续计数列
解决Pandas中统计连续相同class值行数的问题
你可以结合已尝试的cumsum分组标识方法,再对分组结果做统计,就能得到连续相同class的行数。具体步骤如下:
1. 构造示例数据(可跳过,直接用你的DataFrame)
import pandas as pd data = {'class': ['a', 'a', 'a', 'b', 'b', 'c', 'd', 'e', 'e', 'e', 'f', 'a', 'c', 'd', 'd']} df = pd.DataFrame(data)
2. 生成连续分组标识
用shift()对比当前行与上一行的class值,通过cumsum()为每个连续相同的class段分配唯一ID:
df['group_id'] = (df['class'] != df['class'].shift()).cumsum()
3. 统计每个连续分组的行数
基于生成的group_id分组,用transform('count')将每组的行数赋值给该组的每一行:
df['consecutive_count'] = df.groupby('group_id')['class'].transform('count')
4. 清理临时列(可选)
如果不需要group_id列,可直接删除:
df = df.drop('group_id', axis=1)
最终输出
执行后得到的结果与你的预期一致:
class consecutive_count 0 a 3 1 a 3 2 a 3 3 b 2 4 b 2 5 c 1 6 d 1 7 e 3 8 e 3 9 e 3 10 f 1 11 a 1 12 c 1 13 d 2 14 d 2
为什么之前的方法不生效?
- 直接按
class分组的groupby统计的是该class在整个DataFrame中的总出现次数,而非连续段的行数; - 单独用
cumsum仅完成了连续段的分组标识,没有对每个分组的行数做统计,所以需要后续的分组计数步骤。
内容的提问来源于stack exchange,提问作者user3599600
相关产品推荐
相关产品推荐

