Python 检查n个连续元素是否等于x,以及之前的任何元素是否大于x

Python 检查n个连续元素是否等于x,以及之前的任何元素是否大于x,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个6分钟读数的熊猫数据框。我想将每一行标记为NF或DF。 NF=5个连续条目为0且至少一个先前读数大于0的行 DF=不符合NF规则的所有其他行 [[4,6,7,2,1,0,0,0,0,0] [6,0,0,0,0,0,2,2,2,5] [0,0,0,0,0,0,0,0,0,0] [0,0,0,0,0,4,6,7,2,1]] 预期结果: [NF, NF, DF, DF] 我可以用滑动窗吗?做这件事的好方法是什么? 利用起始numpy矢量解,给出了真值矩阵的两个运算条件 使用True为

我有一个6分钟读数的熊猫数据框。我想将每一行标记为NF或DF。 NF=5个连续条目为0且至少一个先前读数大于0的行 DF=不符合NF规则的所有其他行

[[4,6,7,2,1,0,0,0,0,0]
 [6,0,0,0,0,0,2,2,2,5]
 [0,0,0,0,0,0,0,0,0,0]
 [0,0,0,0,0,4,6,7,2,1]]
预期结果:

[NF, NF, DF, DF]
我可以用滑动窗吗?做这件事的好方法是什么?

  • 利用起始numpy矢量解,给出了真值矩阵的两个运算条件
  • 使用True1的事实,因此可以使用
    cumsum()
  • 第五个零点的位置应比第一个零点高出4个位置
  • 如果您只需要数组,则
    np.where()
    会给出该数组,而无需将if赋回数据帧列
  • 使用了另一个测试用例
    [1,0,0,0,0,1,0,0,0]
    ,其中有许多零,但不是5个连续的
0 1. 2. 3. 4. 5. 6. 7. 8. 9 物件 0 4. 6. 7. 2. 1. 0 0 0 0 0 法国试验标准 1. 6. 0 0 0 0 0 2. 2. 2. 5. 法国试验标准 2. 0 0 0 0 0 0 0 0 0 0 DF 3. 1. 0 0 0 0 1. 0 0 0 0 DF 4. 0 0 0 0 0 4. 6. 7. 2. 1. DF 请浏览、和,以了解此网站的工作原理,并帮助您改进当前和未来的问题,从而帮助您获得更好的答案。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后询问有关实现的具体问题。堆栈溢出不是为了替换现有的教程和文档。
df = pd.DataFrame([[4,6,7,2,1,0,0,0,0,0],
 [6,0,0,0,0,0,2,2,2,5],
 [0,0,0,0,0,0,0,0,0,0],
 [1,0,0,0,0,1,0,0,0,0],
 [0,0,0,0,0,4,6,7,2,1]])

df = df.assign(res=np.where(
    # five consecutive zeros
    ((np.argmax(np.cumsum(df.eq(0).values, axis=1)==1, axis=1)+4) == 
     np.argmax(np.cumsum(df.eq(0).values, axis=1)==5, axis=1)) &
    # first zero somewhere other that 0th position
    np.argmax(df.eq(0).values, axis=1)>0
    ,"NF","DF")
)