Python Pandas统计DataFrame的Signal列中连续2的出现次数
实现代码
import pandas as pd # 构造样例DataFrame,实际使用时替换成你自己的DataFrame即可 data = {'Signal': {0: 2, 1: 3, 2: 2, 3: 2, 4: 2, 5: 2, 6: 2, 7: 2, 8: 2, 9: 3, 10: 3, 11: 3, 12: 3, 13: 3, 14: 3, 15: 3, 16: 3, 17: 3, 18: 3, 19: 3, 20: 3, 21: 3, 22: 3, 23: 3, 24: 2, 25: 2, 26: 2, 27: 2, 28: 2, 29: 2, 30: 2, 31: 2, 32: 3, 33: 3, 34: 3, 35: 3, 36: 3, 37: 2, 38: 2, 39: 3, 40: 3, 41: 3, 42: 3, 43: 3, 44: 3, 45: 3, 46: 3, 47: 3, 48: 3, 49: 3}} df = pd.DataFrame(data) # 核心统计逻辑 mask = df['Signal'] == 2 # 为每一段连续的相同值打分组标签 group_labels = mask.ne(mask.shift()).cumsum() # 过滤出值为2的段,统计每段长度转为列表 result = mask[mask].groupby(group_labels).count().tolist() print(result)
运行上述代码输出结果为:[1, 7, 8, 2],和样例数据的实际连续2长度完全匹配。
逻辑说明
- 第一步通过布尔掩码
mask标记出所有Signal值为2的行 - 第二步
mask.ne(mask.shift()).cumsum()会给每一段连续的相同布尔值打上唯一的数字标签,实现连续段的自动分组 - 第三步过滤出值为2的行,按分组标签统计每组的行数,就得到了每段连续2的长度,转为列表即可得到目标结果
内容的提问来源于stack exchange,提问作者johnson
相关产品推荐
相关产品推荐

