如何根据序列相关的约束条件来过滤行?[英] How to filter rows based on the sequence-related constraint?

本文是小编为大家收集整理的关于如何根据序列相关的约束条件来过滤行?的处理方法,想解了如何根据序列相关的约束条件来过滤行?的问题怎么解决?如何根据序列相关的约束条件来过滤行?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有以下数据框:

df = 
    ID   TYPE   VD_0   VD_1   VD_2   VD_3
    1    ABC    V1234  456    123    564
    2    DBC    456    A45    123    564
    3    ABD    456    V1234  456    123
    4    ABD    123    V1234  SSW    123

VD_0、VD_1、VD_2、VD_3的值列表如下:

myList = [V1234,456,A45]

我只想获取 df 中的那些行,这些行在 VD_0、VD_1、VD_2 和 VD_3 列中具有来自 myList 的 2 次连续出现的值.

结果是这个:

result = 
    ID   TYPE   VD_0   VD_1   VD_2   VD_3
    1    ABC    V1234  456    123    564
    2    DBC    456    A45    123    564
    3    ABD    456    V1234  456    123

例如,在ID 1的行中,VD_0和VD_1的值对应地等于V1234和456,并且这两个值都属于myList.相同的逻辑适用于具有 ID 2 (456,A45) 和 3 (456,V1234) 的行.

我该怎么做?

推荐答案

我同意MaxU的答案的开始,但是,结束应该更容易IIUC.您想要的过滤器应该从您的列表中获得 2 个连续匹配项.您可以通过说您希望 isin 结果的逐行总和至少为 2 来得到这个答案,如果您将它们 2 2 相加的话.这称为沿轴 = 1 的 2 周期滚动窗口和.然后取每行的最大值,匹配的值大于或等于 2:

subset = df.filter(like='VD_')

df[subset.isin(myList).rolling(2, axis=1).sum().max(axis=1)>=2]
Out[26]: 
   ID TYPE   VD_0   VD_1 VD_2  VD_3
0   1  ABC  V1234    456  123   564
1   2  DBC    456    A45  123   564
2   3  ABD    456  V1234  456   123

本文地址:https://www.itbaoku.cn/post/1728136.html