如何按连续批次统计DataFrame列中重复值的出现次数?
解决连续批次重复次数统计问题
你可以借助pandas的游程编码分组思路实现需求,具体操作如下:
首先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({'Value': [0, 0, 0, 1, 1, 0, 0]})
执行以下代码生成Freq列:
# 生成连续相同值的分组标识 df['group_id'] = df['Value'].ne(df['Value'].shift()).cumsum() # 计算每个分组的长度,将结果映射回原DataFrame df['Freq'] = df.groupby('group_id')['Value'].transform('count') # 不需要分组标识的话可以删除该列 df = df.drop('group_id', axis=1)
最终得到的结果:
| Value | Freq |
|---|---|
| 0 | 3 |
| 0 | 3 |
| 0 | 3 |
| 1 | 2 |
| 1 | 2 |
| 0 | 2 |
| 0 | 2 |
注:你提供的示例结果最后一行Freq为1应为笔误,原输入最后两个连续0的批次长度实际为2。
原理说明
df['Value'].ne(df['Value'].shift()):判断当前行的Value与上一行是否不同,返回布尔值序列.cumsum():对布尔值累加,每遇到一次不同值就生成新的分组ID,让连续相同值被分到同一组groupby('group_id').transform('count'):计算每个分组的长度,并用transform将结果广播到原分组的每一行,实现每行对应所在连续批次的重复次数
内容的提问来源于stack exchange,提问作者user6386155
相关产品推荐
相关产品推荐

