gpt4 book ai didi

python - 使用 np.where 根据某个值增加计数器

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:01 25 4
gpt4 key购买 nike

当我使用 np.where 根据几天的时差处理 Pandas 系列时,我试图增加一个计数器。例如,如果我有一个具有以下值的系列:

Date        Value
01/03/2017 5
02/03/2017 8
03/03/2017 3
04/03/2017 7
12/03/2017 1
13/03/2017 3
14/03/2017 4

我会通过这段代码去一个看起来像这样的系列

df['DIFF'] = df['Date'].diff()/np.timedelta64(1, 'D')

生成此数据框。

Date        Value  DIFF
01/03/2017 5 0
02/03/2017 8 1
03/03/2017 3 1
04/03/2017 7 1
12/03/2017 1 8
13/03/2017 3 1
14/03/2017 4 1

然后我想创建一个计算生命数量的生命周期,假设时间差大于 4 将是生命周期的一个新实例。

Date        Value  DIFF   LIFETIME
01/03/2017 5 0 1
02/03/2017 8 1 1
03/03/2017 3 1 1
04/03/2017 7 1 1
12/03/2017 1 8 2
13/03/2017 3 1 2
14/03/2017 4 1 2

我想我已经快完成这段代码了

df['LIFE'] = np.where(df['DIFF'] >=4, life_counter=df.shift(-1)+1, df.shift(-1))

这里的逻辑是,如果 DIFF 大于或等于 4,我会将 LIFE 变量设置为之前的 + 1。否则,它将与之前的值相同。这似乎是一种携带状态的巧妙方式。但是,我的循环似乎忽略了我设置的状态,这可能是由于 np.where 的工作方式。有人知道做我正在做的事情并让它工作的方法吗?目前,我的输出是这样的。

Date        Value  DIFF   LIFETIME
01/03/2017 5 0 1
02/03/2017 8 1 1
03/03/2017 3 1 1
04/03/2017 7 1 1
12/03/2017 1 8 2
13/03/2017 3 1 1
14/03/2017 4 1 1

最佳答案

我相信您只是想要一个 bool 数组的累加和,并增加 1:

>>> df
Date Value DIFF
0 01/03/2017 5 0
1 02/03/2017 8 1
2 03/03/2017 3 1
3 04/03/2017 7 1
4 12/03/2017 1 8
5 13/03/2017 3 1
6 14/03/2017 4 1
>>> df['LIFETIME'] = np.cumsum(df.DIFF >= 4) + 1
>>> df
Date Value DIFF LIFETIME
0 01/03/2017 5 0 1
1 02/03/2017 8 1 1
2 03/03/2017 3 1 1
3 04/03/2017 7 1 1
4 12/03/2017 1 8 2
5 13/03/2017 3 1 2
6 14/03/2017 4 1 2

关于python - 使用 np.where 根据某个值增加计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44630257/

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