gpt4 book ai didi

python - Pandas/Numpy 组值变化和导数值变化高于/低于 0

转载 作者:行者123 更新时间:2023-11-30 22:05:18 28 4
gpt4 key购买 nike

我有一系列值(Pandas DF 或 Numpy Arr):

vals = [0,1,3,4,5,5,4,2,1,0,-1,-2,-3,-2,3,5,8,4,2,0,-1,-3,-8,-20,-10,-5,-2,-1,0,1,2,3,5,6,8,4,3]
df = pd.DataFrame({'val': vals})

我想将值分为 4 类:

  1. 增加到 0 以上
  2. 减少至 0 以上
  3. 增加到 0 以下
  4. 减少到 0 以下

目前使用 Pandas 的方法是分类为高于/低于 0,然后通过查看 diff 值何时变化高于/低于 0 来分类为增加/减少。

df['above_zero'] = np.where(df['val'] >= 0, 1, 0)
df['below_zero'] = np.where(df['val'] < 0, 1, 0)
df['diffs'] = df['val'].diff()
df['diff_above_zero'] = np.where(df['diffs'] >= 0, 1, 0)
df['diff_below_zero'] = np.where(df['diffs'] < 0, 1, 0)

这会产生所需的输出,但现在我正在尝试找到一种解决方案,如何在 4 个条件之一发生变化时将这些列分组为升序组号。

所需的输出如下所示(*group col 是手动输入的,计算值可能存在错误):

id   val  above_zero  below_zero  diffs  diff_above_zero  diff_below_zero  group
0 0 1 0 0.0 1 0 0
1 1 1 0 1.0 1 0 0
2 3 1 0 2.0 1 0 0
3 4 1 0 1.0 1 0 0
4 5 1 0 1.0 1 0 0
5 5 1 0 0.0 1 0 0
6 4 1 0 -1.0 0 1 1
7 2 1 0 -2.0 0 1 1
8 1 1 0 -1.0 0 1 1
9 0 1 0 -1.0 0 1 1
10 -1 0 1 -1.0 0 1 2
11 -2 0 1 -1.0 0 1 2
12 -3 0 1 -1.0 0 1 2
13 -2 0 1 1.0 1 0 3
14 3 1 0 5.0 1 0 4
15 5 1 0 2.0 1 0 4
16 8 1 0 3.0 1 0 4
17 4 1 0 -4.0 0 1 5
18 2 1 0 -2.0 0 1 5
19 0 1 0 -2.0 0 1 5
20 -1 0 1 -1.0 0 1 6
21 -3 0 1 -2.0 0 1 6
22 -8 0 1 -5.0 0 1 6
23 -20 0 1 -12.0 0 1 6
24 -10 0 1 10.0 1 0 7
25 -5 0 1 5.0 1 0 7
26 -2 0 1 3.0 1 0 7
27 -1 0 1 1.0 1 0 7
28 0 1 0 1.0 1 0 8
29 1 1 0 1.0 1 0 8
30 2 1 0 1.0 1 0 8
31 3 1 0 1.0 1 0 8
32 5 1 0 2.0 1 0 8
33 6 1 0 1.0 1 0 8
34 8 1 0 2.0 1 0 8
35 4 1 0 -4.0 0 1 9
36 3 1 0 -1.0 0 1 9

对于如何有效解决此问题的任何帮助,我们将不胜感激。谢谢!

最佳答案

设置

g1 = ['above_zero', 'below_zero', 'diff_above_zero', 'diff_below_zero']
<小时/>

您可以简单地为所有 bool 列建立索引,并使用 shift:

c = df.loc[:, g1]
(c != c.shift().fillna(c)).any(1).cumsum()

0     0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 1
9 1
10 2
11 2
12 2
13 3
14 4
15 4
16 4
17 5
18 5
19 5
20 6
21 6
22 6
23 6
24 7
25 7
26 7
27 7
28 8
29 8
30 8
31 8
32 8
33 8
34 8
35 9
36 9
dtype: int32

关于python - Pandas/Numpy 组值变化和导数值变化高于/低于 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53069645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com