使用np.where基于滚动窗口计算更新pandas数据框列

问题描述 投票:0回答:1

我有下面的代码,它可以根据“A”列的滚动窗口计算将数据帧列“标志”更新为是或否(“A”中的滚动窗口值应具有最小值> 100和最大值<200 to get yes value, otherwise value is no:

df['flag'] = np.where(
                     ((df['A'].rolling(60).apply(lambda s: s.min()))> 50) &
                     ((df['A'].rolling(60).apply(lambda s: s.max()))< 100)
                     ,'yes', 'no')

现在我只需要更改它,这样如果不满足条件,它就不会更新 df['flag'] 值,而不是写“no”。或者也许有一种完全不同的方法来完成同样的事情?

python pandas dataframe numpy
1个回答
0
投票

您可以使用

loc
方法来达到

df = pd.DataFrame({
    'A': np.random.randint(50, 150, size=200)
})

df['flag'] = ''

mask = ((df['A'].rolling(60).apply(lambda s: s.min()) > 100) &
        (df['A'].rolling(60).apply(lambda s: s.max()) < 200))

df.loc[mask, 'flag'] = 'yes'
© www.soinside.com 2019 - 2024. All rights reserved.