如何按顺序出现对字符串进行分组,并在另一列中检查值>X

2024-06-03 06:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

对于下面的数据结构,我想使用Python来查找一个模式在列C0>;=中连续出现的数量,该列大于阈值X,而在另一列prcC0中对应的值的数量大于阈值Y

对于下面的例子,如果阈值X=3,Y为40,那么算法应该输出。行2:4表示字符串模式B出现且大于等于3,对应的prcC0值大于等于40

该算法应该扫描整个数据帧,寻找这样的序列模式。你知道吗

Seq nMin    nUniqe  n3WJ    prc3WJ  C0  prcC0
0   s00000  482 9   172 35.68   A   1.65
1   s00001  503 10  193 38.37   A   15.33
2   s00002  415 9   221 53.25   B   44.03
3   s00003  325 10  155 47.69   B   42.99
4   s00004  429 10  175 40.79   B   43.37

Tags: 数据字符串gt算法数据结构数量模式序列
1条回答
网友
1楼 · 发布于 2024-06-03 06:12:59

让我们用熊猫:

import pandas as pd
df

Seq  nMin  nUniqe  n3WJ  prc3WJ C0  prcC0
0  s00000   482       9   172   35.68  A   1.65
1  s00001   503      10   193   38.37  A  15.33
2  s00002   415       9   221   53.25  B  44.03
3  s00003   325      10   155   47.69  B  42.99
4  s00004   429      10   175   40.79  B  43.37

X = 3
Y = 40
df_out = df.assign(Cond=df.prcC0 >= Y)
df_out.groupby((~df_out['Cond']).cumsum()).filter(lambda x: x.shape[0] >= X+1).query('Cond == True')

输出:

      Seq  nMin  nUniqe  n3WJ  prc3WJ C0  prcC0  Cond
2  s00002   415       9   221   53.25  B  44.03  True
3  s00003   325      10   155   47.69  B  42.99  True
4  s00004   429      10   175   40.79  B  43.37  True

相关问题 更多 >