【发布时间】:2017-06-19 12:11:29
【问题描述】:
当我使用 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
【问题讨论】: