Python 如何创建一个布尔列,指示某个值在前面的x个周期中是否会增加n倍?
我在一个数据框中有一个只包含数字的列,我需要创建一个布尔列来指示该值在前面的x周期中是否会增加n倍 我开发了一个使用两个for循环的解决方案,但对我来说,它似乎不够python 有没有更好、更有效的方法?可能是map()或apply()的内容 请在下面找到我的MRE代码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'
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