有没有一种简单的方法可以将熊猫数据帧中的每个新条件的时间清零



我有一个大的ass时间序列数据帧,其中一个条件以可变的间隔变化。我想用每个新条件将时间归零,所以我将类别转换为整数,并使用.diff((创建了一个新列,以指示出现非零值切换的行。然后我做了一个新的专栏,";Mod_time";作为在每个新条件下为零的新时间值的容器。这就是我想要的表格的样子:

><1>4>//tr>
时间 条件 数值条件
0 Applesnan
1 苹果 6
2 苹果 6 3 苹果 6 4 橙色 20
5 橙色

有各种各样的问题涉及带重置的累积和。这一点可以这样看:你想做时间差的累积和,当";数值条件";更改。

import numpy as np
def cumsum_reset(v, reset):
v = v.copy()
c = np.cumsum(~reset)
v[reset] = -np.diff(np.r_[0, c[reset]])
return np.cumsum(v)

# application
cond = df['Numerical Condition']
df['Mod_time'] = cumsum_reset(np.diff(np.r_[0, df['Time']]),cond != cond.shift())

关于您的数据:

Time Condition  Numerical Condition  Fruit_switch  Mod_time
0     0    Apples                    6           NaN         0
1     1    Apples                    6           0.0         1
2     2    Apples                    6           0.0         2
3     3    Apples                    6           0.0         3
4     4   Oranges                    2          -4.0         0
5     5   Oranges                    2           0.0         1

编辑

从评论中可以看出,当df['Condition'](水果名称(发生变化时,似乎真的应该进行重置。此外,行之间的时间差总是一。因此,以下内容也应该起作用:

c = df['Condition']
df['Mod_time'] = cumsum_reset(np.ones_like(c), c.shift() != c)

最新更新