Python 如何创建一个布尔列,指示某个值在前面的x个周期中是否会增加n倍?

Python 如何创建一个布尔列,指示某个值在前面的x个周期中是否会增加n倍?,python,pandas,Python,Pandas,我在一个数据框中有一个只包含数字的列,我需要创建一个布尔列来指示该值在前面的x周期中是否会增加n倍 我开发了一个使用两个for循环的解决方案,但对我来说,它似乎不够python 有没有更好、更有效的方法?可能是map()或apply()的内容 请在下面找到我的MRE代码 df = pd.DataFrame([1,2,2,1,3,2,1,3,4,1,2,3,4,4,5,1], columns=['column']) df['double_in_5_periods_ahead'] = 'n/a'

我在一个数据框中有一个只包含数字的列,我需要创建一个布尔列来指示该值在前面的x周期中是否会增加n倍

我开发了一个使用两个for循环的解决方案,但对我来说,它似乎不够python

有没有更好、更有效的方法?可能是map()或apply()的内容

请在下面找到我的MRE代码

df = pd.DataFrame([1,2,2,1,3,2,1,3,4,1,2,3,4,4,5,1], columns=['column'])

df['double_in_5_periods_ahead'] = 'n/a'
periods_ahead = 5

for i in range(0,len(df)-periods_ahead):
    for j in range(1,periods_ahead):
        if df['column'].iloc[i+j]/df['column'].iloc[i] >= 2:
            df['double_in_5_periods_ahead'].iloc[i] = 1
            break
        else:
            df['double_in_5_periods_ahead'].iloc[i] = 0
这是输出:


column  double_in_5_periods_ahead
0   1   1
1   2   0
2   2   0
3   1   1
4   3   0
5   2   1
6   1   1
7   3   0
8   4   0
9   1   1
10  2   1
11  3   n/a
12  4   n/a
13  4   n/a
14  5   n/a
15  1   n/a
让我们试试滚动

n = 5 
df['new']  = (df['column'].iloc[::-1].rolling(n).max() / df['column']).gt(2).astype(int)
df.iloc[-n:,1]=np.nan
df
Out[146]: 
    column  new
0        1  1.0
1        2  0.0
2        2  0.0
3        1  1.0
4        3  0.0
5        2  0.0
6        1  1.0
7        3  0.0
8        4  0.0
9        1  1.0
10       2  1.0
11       3  NaN
12       4  NaN
13       4  NaN
14       5  NaN
15       1  NaN