代码之家  ›  专栏  ›  技术社区  ›  Cranjis

Python数据帧通过列获取零段的边框

  •  -3
  • Cranjis  · 技术社区  · 7 年前

    s = [3,7,8,0,0,0,6,12,0,0,0,0,0,8,5,0,2]
    

    所以我想得到:

    [8,12]
    

    谢谢

    0 回复  |  直到 7 年前
        1
  •  1
  •   anky    7 年前

    我是用 more_itertools 考虑到 s

    import more_itertools as mit
    a = [list(group) for group in mit.consecutive_groups(s.loc[s.eq(0)].index.tolist())]
    

    其次,从列表中选择第一个和最后一个条目

    list(set([i[0] for i in a]+[x[-1] for x in a]))
    #[3, 5, 8, 12, 15]
    

    要获取0大于3的第一个和最后一个索引,请使用:

    list(set([i[0] for i in a if len(i)>3]+[x[-1] for x in a if len(x)>3]))
    #[8, 12]
    
        2
  •  1
  •   ncica Snowcrash    7 年前
    s = [3,7,8,0,0,0,6,12,0,0,0,0,0,8,5,0,2]
    idx = []
    for i in range(len(s)):
        if s[i] == 0 and (s[i+1] != 0 or s[i-1] != 0):
            idx.append(i)
    print (idx)
    # result :[3, 5, 8, 12, 15]
    
        3
  •  0
  •   Abhinay Pandey    7 年前

    entryFlag

    s = [3,7,8,0,0,0,6,12,0,0,0,0,0,8,5,0,2]
    entryFlag=True
    i=0
    s2=[]
    for x in s:
    
        if entryFlag:
            if x==0:
                s2.append(i)
                entryFlag=False
        else:
            if x!=0:
                s2.append(i-1)
                entryFlag=True
        i+=1
    print(s2)
    
    推荐文章