排除熊猫中滚动平均值计算的行

s_m*_*_mj 3 python dataframe pandas

我正在寻找 Pandas 方法来解决这个问题,我有一个 DataFrame 作为

df
         A     RM
    0  384    NaN
    1  376  380.0
    2  399  387.5
    3  333  366.0
    4  393  363.0
    5  323  358.0
    6  510  416.5
    7  426  468.0
    8  352  389.0 
Run Code Online (Sandbox Code Playgroud)

我想看看 df['A'] > [Previous] RM 值中的值是否应该已经0更新了新列状态

     A     RM  Status
0  384    NaN       0
1  376  380.0       1
2  399  387.5       0
3  333  366.0       1
4  393  363.0       0
5  323  358.0       1
6  510  416.5       0
7  426  468.0       0
8  352  389.0       1
Run Code Online (Sandbox Code Playgroud)

我想我需要Shift与 numpy一起使用where,但我没有达到预期。

import pandas as pd
import numpy as np
df=pd.DataFrame([384,376,399,333,393,323,510,426,352], columns=['A'])


df['RM']=df['A'].rolling(window=2,center=False).mean()

df['Status'] =  np.where((df.A > df.RM.shift(1).rolling(window=2,center=False).mean()) , 0, 1) 
Run Code Online (Sandbox Code Playgroud)

最后,应用滚动均值

df.AverageMean=df[df['Status'] == 1]['A'].rolling(window=2,center=False).mean()
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 5

就是简单 shift

df['Status']=(df.A<=df.RM.fillna(9999).shift()).astype(int)
df
Out[347]: 
     A     RM  Status
0  384    NaN       0
1  376  380.0       1
2  399  387.5       0
3  333  366.0       1
4  393  363.0       0
5  323  358.0       1
6  510  416.5       0
7  426  468.0       0
8  352  389.0       1
Run Code Online (Sandbox Code Playgroud)