如何在第一次出现特定序列之前识别序列和索引号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在第一次出现特定序列之前识别序列和索引号相关的知识,希望对你有一定的参考价值。
我在熊猫中有一个数据框,下面提供了一个示例:
Person appear_1 appear_2 appear_3 appear_4 appear_5 appear_6
A 1 0 0 1 0 1
B 1 1 0 0 1 0
C 1 0 1 1 0 0
D 1 1 0 1 0 0
您可以看到1和0随机出现在不同的列中。如果有人可以用python建议我一个代码,这样我将能够按顺序计算第一次出现1、0和0之前出现“ 1”的次数,这将是有帮助的。例如,对于成员A,第一个双零事件发生在appear_2和appear_3,因此持续时间将为1。类似地,对于成员B,第一个双零事件发生在appear_3和appear_4,因此共有两个1在此之前发生。因此,在总数为1的计数过程中,也考虑了1,0,0序列中包括的1。这是因为1表示一个人开始了该过程,而0,0表示他/她连续两次未出现启动该过程之后。结果表应具有一个新的“ duration”列,如下所示:
Person appear_1 appear_2 appear_3 appear_4 appear_5 appear_6 duration
A 1 0 0 1 0 1 1
B 1 1 0 0 1 0 2
C 1 0 1 1 0 0 3
D 1 1 1 1 0 0 4
谢谢你。
答案
这里有点逻辑,首先我们使用rolling
sum
查找等于0的值,然后我们只需要执行cumprod
,一旦它达到0,prod
将返回0,然后我们就需要sum
每行的所有值都不为0以获得结果
s=df.iloc[:,1:]
s1=s.rolling(2,axis=1,min_periods=1).sum().cumprod(axis=1)
s.mask(s1==0).sum(1)
Out[37]:
0 1.0
1 2.0
2 3.0
3 4.0
dtype: float64
以上是关于如何在第一次出现特定序列之前识别序列和索引号的主要内容,如果未能解决你的问题,请参考以下文章