【问题标题】:Find a sequence and remove previous entries查找序列并删除以前的条目
【发布时间】:2020-09-04 03:31:30
【问题描述】:

我有一个关于优化我的代码的问题。

Signal = pd.Series([1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0])

我有一个包含周期性位码的熊猫系列。我的目标是删除在某个序列之前开始的所有条目,例如1,1,0,0。所以在我的例子中,我希望有一个这样的简化系列:

[1, 1, 0, 0, 1, 1, 0, 0]

我已经有一个 1, 1 的解决方案,但它不是很优雅,也不是很容易在我的示例中修改:1,1,0,0

    i = 0
    bool = True
    while bool:
        a = Signal.iloc[i]
        b = Signal.iloc[i + 1]
        if a == 1 and b == 1:
            bool = False
        else:
            i = i + 1

   Signal = Signal[i:]

感谢您的帮助。

【问题讨论】:

    标签: python pandas numpy series


    【解决方案1】:

    我们可以使用view_as_windows 获取序列的滚动窗口视图,检查序列是否相等并使用argmax 找到第一个匹配项:

    from skimage.util import view_as_windows
    
    seq = [1, 1, 0, 0]
    m = (view_as_windows(Signal.values, len(seq))==seq).all(1)
    Signal[m.argmax():]
    
    3     1
    4     1
    5     0
    6     0
    7     1
    8     1
    9     0
    10    0
    dtype: int64
    

    【讨论】:

      【解决方案2】:

      我会选择正则表达式 - 使用 web interface 来识别模式。

      例如:

      1,1,0,0,(.*\d)
      

      将产生一个 group(1) 输出,由 1,1,0,0 模式之后的所有数字组成。

      【讨论】:

        猜你喜欢
        • 2017-01-14
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 2014-06-19
        • 1970-01-01
        • 2019-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多