如何在pandas中统计指定值在过去N行中的出现次数
统计过去n行指定值出现次数的实现方案
你需要的是固定窗口大小的滚动频次统计功能,不需要用iterrows遍历,pandas内置的向量化滚动窗口操作效率更高,完全匹配需求:
核心实现代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({'X': [1, 1, 1, 0, 0, 0, 0, 1, 1]}) n = 3 # 滚动窗口大小 target = 1 # 要统计的指定值 # 核心逻辑:先判断值是否等于目标值,再做滚动求和,min_periods=1保证前n-1行也能输出结果 df['results'] = df['X'].eq(target).rolling(window=n, min_periods=1).sum().astype(int)
运行后输出的df和你给出的示例结果完全一致:
| X | results |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 0 | 2 |
| 0 | 1 |
| 0 | 0 |
| 0 | 0 |
| 1 | 1 |
| 1 | 2 |
可选iterrows实现(仅作参考,不推荐大数据量使用)
如果一定要用iterrows实现,可以手动维护一个滑动窗口统计:
n = 3 target = 1 res_list = [] window = [] for _, row in df.iterrows(): window.append(row['X']) if len(window) > n: window.pop(0) res_list.append(window.count(target)) df['results'] = res_list
两种方法输出结果完全相同,向量化方案的运行效率在数据量超过1万行时会比iterrows方案高100倍以上。
内容的提问来源于stack exchange,提问作者user3763220
相关产品推荐
相关产品推荐

