R语言按设备分组实现7天滚动窗口problem=1计数的方法问询
你可以直接用Pandas内置的分组滚动计算功能实现需求,是原生向量化操作,性能远高于自定义循环,即使处理百万级行数据也非常高效。
完整实现代码如下:
import pandas as pd # 示例数据构造,实际使用时替换为你自己的DataFrame即可 data = { 'day': ['2021-01-01','2021-01-02','2021-01-03','2021-01-04','2021-01-05','2021-01-06','2021-01-07','2021-01-08','2021-01-09','2021-01-10', '2021-01-01','2021-01-02','2021-01-03','2021-01-04','2021-01-05','2021-01-06','2021-01-07','2021-01-08','2021-01-09','2021-01-10'], 'device': ['A']*10 + ['B']*10, 'problem': [0,1,1,0,0,1,1,1,0,1,1,1,1,1,0,0,1,0,1,0] } df = pd.DataFrame(data) df['day'] = pd.to_datetime(df['day']) # 核心计算逻辑 # 先按设备+日期排序,避免数据乱序导致计算错误 df = df.sort_values(by=['device', 'day']).reset_index(drop=True) # 按设备分组后做7行滚动求和,不满7行自动返回NaN df['problem_count'] = df.groupby('device')['problem']\ .rolling(window=7, min_periods=7)\ .sum()\ .reset_index(level=0, drop=True) # 输出结果和你要求的格式完全一致 print(df)
核心参数说明:
window=7:指定滚动窗口为7行,匹配你要统计7条数据的需求min_periods=7:要求窗口内最少有7个有效值才返回计算结果,前6行不满7行自动返回NaN,符合你的输出要求- 分组逻辑保证不同设备的滚动计算完全独立,不会互相干扰
内容的提问来源于stack exchange,提问作者dloudtrain
相关产品推荐
相关产品推荐

