首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个Pandas布尔列,指示一个值在前面的x个周期中是否会有n倍的增长?

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

Stack Overflow用户
提问于 2020-11-20 02:28:08
回答 1查看 52关注 0票数 0

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

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

有没有更好、更有效的方法来做这件事?也许是带map()或apply()的东西?

用MRE在我的代码下面找到。

代码语言:javascript
运行
复制
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

这是输出:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-20 02:36:07

让我们试试看

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64922910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档