代码之家  ›  专栏  ›  技术社区  ›  Sharvari Gc

pandas:返回序列中每个字符串值的所有匹配键

  •  0
  • Sharvari Gc  · 技术社区  · 7 年前

    如何将搜索列表中的所有匹配键作为逗号分隔的值返回。

    例如

    s = pd.Series(['cat dog','hat cat','dog','fog cat','pet'])
    searchfor = ['cat', 'dog']
    

    我想得到这个:

    [“猫,狗”,“猫”,“狗”,“猫”,“无”]

    2 回复  |  直到 7 年前
        1
  •  1
  •   BENY    7 年前

    只是 split 先做然后做 str.contains

    s1=s.str.split(' ',expand=True).stack()
    
    s1[s1.str.contains('|'.join(searchfor))].groupby(level=0).apply(' '.join).reindex(s.index)
    Out[778]: 
    0    cat dog
    1        cat
    2        dog
    3        cat
    4        NaN
    dtype: object
    
        2
  •  0
  •   Sharvari Gc    7 年前

    我的同事帮了我。 以下是我最终的做法:

    s = pandas.Series(['cat dog','hat cat','dog','fog cat','pet'])
    searchfor = ['cat', 'dog']
    
    b = ['']*len(s)
    for i in numpy.arange(0,len(s)):
        for j in numpy.arange(0,len(searchfor)):
            b[i] = b[i] + ', ' + searchfor[j] if searchfor[j] in s[i] and b[i]!= '' else (searchfor[j] if searchfor[j] in s[i] else b[i])
    df = DataFrame({'s': s, 'searchfor': [numpy.nan if i=='' else i for i in b]})
    

    df公司

        s        searchfor
    0   cat dog  cat, dog
    1   hat cat  cat
    2   dog      dog
    3   fog cat  cat
    4   pet      NaN