Pandas 矢量化操作 - 制作计数功能,当阈值达到 5 时重置

问题描述 投票:0回答:1

我对编程很陌生,在这件事上我很挣扎。如有任何帮助,我们将不胜感激!

我有一个股票数据框,包括价格和上涨 (1) 或下跌 (-1) 的信号。 我想将重复序列计入另一列“计数”。 所以,当存在序列 1,1,1;那么计数将为1,2,3。 如果是 -1,-1,-1;那么计数也将是 1,2,3

此外,当阈值达到5时,计数会重置。 1 或 -1 都没有关系。

所以,我所拥有的是:

     price  sign
0    13     1
1    12     1
2    11     -1
3    12     -1
4    13     1
5    14     1
6    14     1
7    14     1
8    14     1
9    14     1
10   14     1
.
.
.

我想要的是:

     price  sign  count
0    13     1       1
1    12     1       2
2    11     -1      1
3    12     -1      2
4    13     1       1
5    14     1       2
6    14     1       3
7    14     1       4
8    14     1       5
9    14     1       1
10   14     1       2
.
.
.

我已经在普通的 python 代码中包含了这段代码。 但是我不能在 Pandas 矢量化操作中做到这一点! 请帮助我!

python pandas count cumsum threshold
1个回答
0
投票

用途:

s = df['sign'].ne(df['sign'].shift()).cumsum()
df['count'] = df.groupby(s).cumcount() % 5 + 1

print (df)
    price  sign  count
0      13     1      1
1      12     1      2
2      11    -1      1
3      12    -1      2
4      13     1      1
5      14     1      2
6      14     1      3
7      14     1      4
8      14     1      5
9      14     1      1
10     14     1      2
© www.soinside.com 2019 - 2024. All rights reserved.