我希望基于2个数据帧列中的行值创建一个计数器列,此处以Col1和Col2表示。
数据集的示例如下:
Col1 Col2
a 0
a 0
a 0
a 1
a 0
a 0
a 0
a 1
a 1
b 0
b 0
b 1
b 1
b 0
b 0
其中Col1是一个标识变量,当我遇到新的标识变量时,我希望计数器重新开始(因此,当“ a”切换为“ b”时,计数器返回0)。
Col2表示数据中有新输入。当出现1时,将出现一个新的输入,此后的0对应于该输入中的测量值。每次出现1时,我都希望计数器变量递增1。每次1返回0时(反之亦然),我也希望计数器递增1。基于上面的数据集,我希望输出看起来类似于Col3中的以下内容:
Col1 Col2 Col3
a 0 0
a 0 0
a 0 0
a 1 1
a 0 2
a 0 2
a 0 2
a 1 3
a 1 4
b 0 0
b 0 0
b 1 1
b 1 2
b 0 3
b 0 3
因此,基本上每次Col2从0切换到1,并且每次出现1时,我都希望计数器增加。每次在Col2中出现0时,我希望计数器保持相同的值。每次Col1更改为新ID(在这种情况下,从“ a”更改为“ b”)时,我都希望计数器从0开始。
我主要使用条件语句来执行此操作,但是其中有很多语句,并且我希望在大型数据集上运行它,这将需要几个小时才能运行。在这两个列上都具有这些条件,是否有一种快速简便的方法来运行类似内容?还是有人对转换这些数据提出建议,以使运行这样的分类更加容易?
我知道这是一个令人困惑的要求,所以请让我知道我是否可以做些什么来使我所寻找的内容更加清楚。
谢谢!
答案 0 :(得分:0)
df.assign(Col4=df1.groupby('Col1').Col2.apply(lambda x:
pd.Series(pd.np.r_[False,(x[1:]==1) |(x.values[1:] != x.values[:-1])].cumsum())).values)
Col1 Col2 Col3 Col4
0 a 0 0 0
1 a 0 0 0
2 a 0 0 0
3 a 1 1 1
4 a 0 2 2
5 a 0 2 2
6 a 0 2 2
7 a 1 3 3
8 a 1 4 4
9 b 0 0 0
10 b 0 0 0
11 b 1 1 1
12 b 1 2 2
13 b 0 3 3
14 b 0 3 3