发布于2021-01-17 16:47 阅读(688) 评论(0) 点赞(1) 收藏(5)
0
1
2
3
4
5
6
7
如何迭代并移至上一行以提取大于当前行但不是最大行的值?例如,给定具有当日价格变化的时间序列数据列表:
arr = np.array([
-2.9 , 1.21, -0.09, 1.43, -0.34, -1.45, 1.44, -3.05, 0.39,
1.2 , 0.96, -0.66, 0.93, 0.19, -2.37, 1.05, -0.47, 1. ,
1.25, 0.16, 0.16, -1.08, 0.91, 1.41, 0.26])
df_date = pd.DataFrame(data=arr, columns=['INDU-CHG%'])
我想从过去检索更高的值,如下面的DataFrame中的“ previous-hi”列所示:
INDU-CHG% previous-hi
0 -2.90 []
1 1.21 []
2 -0.09 [1.21]
3 1.43 []
4 -0.34 [1.43]
5 -1.45 [-0.34]
6 1.44 []
7 -3.05 [1.44]
8 0.39 [1.44]
9 1.20 [1.44]
10 0.96 [1.2]
11 -0.66 [0.96]
12 0.93 [0.96]
13 0.19 [0.93]
14 -2.37 [0.19]
15 1.05 [1.2]
16 -0.47 [1.05]
17 1.00 [1.05]
18 1.25 [1.44]
19 0.16 [1.25]
20 0.16 [1.25]
21 -1.08 [0.16]
22 0.91 [1.25]
23 1.41 [1.44]
24 0.26 [1.41]
下面的代码演示了我的非Pandas实现,该实现在性能上是低效的。
df_date['previous-hi'] = None
for index, row in df_date.iterrows():
df_date['previous-hi'][index] = df_date[:index].where(df_date['INDU-CHG%'] > row['INDU-CHG%']).dropna().tail(1)['INDU-CHG%'].values
编辑:是否可以检索较大值的索引?谢谢。
Series.expanding
与自定义函数一起使用-按last,swap order过滤值,NaN
如果没有匹配值,则next
使用来获取s iter
:
def f(x):
return next(iter(x[x > x[-1]][::-1]), np.nan)
或使用if-else
声明:
def f(x):
a = x[x > x[-1]]
return a[-1] if len(a) > 0 else np.nan
df_date['previous-hi'] = df_date['INDU-CHG%'].expanding().apply(f, raw=True)
print (df_date)
INDU-CHG% previous-hi
0 -2.90 NaN
1 1.21 NaN
2 -0.09 1.21
3 1.43 NaN
4 -0.34 1.43
5 -1.45 -0.34
6 1.44 NaN
7 -3.05 1.44
8 0.39 1.44
9 1.20 1.44
10 0.96 1.20
11 -0.66 0.96
12 0.93 0.96
13 0.19 0.93
14 -2.37 0.19
15 1.05 1.20
16 -0.47 1.05
17 1.00 1.05
18 1.25 1.44
19 0.16 1.25
20 0.16 1.25
21 -1.08 0.16
22 0.91 1.25
23 1.41 1.44
24 0.26 1.41
0
1
2
3
4
5
6
作者:黑洞官方问答小能手
链接: https://www.pythonheidong.com/blog/article/777280/aa8dce7d35ec0d12a5f2/
来源: python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系z452as@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!