+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

数据框从上一行中查找更大的值

发布于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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)