如何在第一次出现特定序列之前识别序列和索引号

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

以上是关于如何在第一次出现特定序列之前识别序列和索引号的主要内容,如果未能解决你的问题,请参考以下文章

第一章 列表和元组

将多重集排序为每个可用元素出现一次的升序子序列

序列模型第一课--循环序列模型

特里和子序列

T-SQL 识别损坏的日期序列中的间隙

Pandas 使用日期时间索引重新排列和插值时间序列