python-3.x - 模式识别和序列检测

标签 python-3.x pandas dataframe pattern-matching

我有一个数据集“df”,看起来像这样:

MEMBER  seen_1   seen_2   seen_3   seen_4   seen_5   seen_6
  A       1        0        0         1       0        1
  B       1        1        0         0       1        0
  C       1        1        1         0       0        1
  D       0        0        1         0       0        1

正如您所看到的,有几行 1 和 0。任何人都可以建议我用 python 编写一段代码,以便我能够计算在第一次按顺序出现 1、0 和 0 之前连续出现“1”的次数。例如,对于成员A,第一个双零事件发生在seen_2和seen_3,因此该事件将为1。类似地,对于成员B,第一个双零事件发生在seen_3和seen_4,因此在此之前发生了两个1 。结果表应该有一个新列“事件”,如下所示:

MEMBER  seen_1   seen_2   seen_3   seen_4   seen_5   seen_6  event 
  A       1        0        0         1       0        1       1
  B       1        1        0         0       1        0       2
  C       1        1        1         0       0        1       3
  D       0        0        1         0       0        1       1

最佳答案

我的方法:

df = df.set_index('MEMBER')

# count 1 on each rows since the last 0
s = (df.stack()
       .groupby(['MEMBER', df.eq(0).cumsum(1).stack()])
       .cumsum().unstack()
    )

# mask of the zeros:
u = s.eq(0)

# look for the first 1 0 0
idx = (~u & 
        u.shift(-1, axis=1, fill_value=False) & 
        u.shift(-2, axis=1, fill_value=False) ).idxmax(1)

# look up
df['event'] = s.lookup(idx.index, idx)

测试数据:

  MEMBER  seen_1  seen_2  seen_3  seen_4  seen_5  seen_6
0      A       1       0       1       0       0       1
1      B       1       1       0       0       1       0
2      C       1       1       1       0       0       1
3      D       0       0       1       0       0       1
4      E       1       0       1       1       0       0

输出:

  MEMBER  seen_1  seen_2  seen_3  seen_4  seen_5  seen_6  event
0      A       1       0       1       0       0       1      1
1      B       1       1       0       0       1       0      2
2      C       1       1       1       0       0       1      3
3      D       0       0       1       0       0       1      1
4      E       1       0       1       1       0       0      2

关于python-3.x - 模式识别和序列检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58880740/

相关文章:

python 3 : reading bytes from stdin pipe with readahead

Python:从一个文件夹中导入多个图像并将它们缩放/组合成一个图像?

python - Pandas:将数据框中的列与为公共(public)变量创建的新列合并

python - 在 Python 和 Pandas 中使用正则表达式分割、分解和整理数据的最佳方法

python-3.x - 将列转换为时间戳 - Pandas Dataframe

python - 如何使用类装饰器计算实例方法调用

python - 使用 ddof=1 为什么 Pandas groupby std 慢得多?

python - Pandas :加入具有相同索引的项目

r - dplyr::full_join 未按预期工作

python - Plotly-Dash:为每个选定的 df 列添加新的 y 轴