pandas DataFrame滑动窗口全为1时如何仅保留首个元素为1?
解决方法
核心逻辑是判断当前行及后续连续两行的Input值是否全部为1,满足条件则当前行标记为1,否则为0,代码实现如下:
import pandas as pd # 构造你提供的示例数据 df = pd.DataFrame({ 'Time': [11, 22, 33, 44, 55, 66, 77, 88, 99, 1010, 1111, 1212, 1313, 1414, 1515], 'Input': [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0] }) # 计算目标列 df['What_I_Want'] = ( df['Input'].eq(1) & df['Input'].shift(-1).eq(1) & df['Input'].shift(-2).eq(1) ).astype(int).fillna(0) # 输出结果查看 print(df)
逻辑说明
shift(-n)表示将整列数据向上偏移n行,shift(-1)取当前行的下一行值,shift(-2)取当前行的下下行值- 三个条件同时成立,代表以当前行为首的3元素滑动窗口所有值都是1,此时当前行标记为1
- 末尾两行因为无法组成长度为3的窗口,偏移后会出现空值,直接填充为0即可
- 运行后得到的
What_I_Want列和你给出的期望输出完全一致
内容的提问来源于stack exchange,提问作者Maryam
相关产品推荐
相关产品推荐

