如何使我的数据框的 Ngram 字典以某个字符串开头 Python

How to make Dict of Ngram of my dataframe start with some string Python

我有dataframe这样的

id  name        cat     subcat
-------------------------------
1   aa bb cc    A       a-a
2   bb cc dd    B       b-a
3   aa bb ee    C       c-a
4   aa gg cc    D       d-a

我想制作 dict 这个 dataframe 其中包含最多 Ngram 两个这样的词

aa bb : 2
bb cc : 2
cc dd : 1
bb ee : 1
aa gg : 1
gg cc : 1

使用成对更新 recipe from itertools

from itertools import combinations, chain

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

pd.Series(chain(*df['name'].str.split(' ')
                           .apply(lambda x: pairwise(x))))\
  .value_counts()

输出:

(aa, bb)    2
(bb, cc)    2
(cc, dd)    1
(bb, ee)    1
(aa, gg)    1
(gg, cc)    1
dtype: int64

IIUC,你可以这样试试:

from itertools import combinations, chain

pd.Series(list(chain(*df['name'].str.split(' ')
                                .apply(lambda x: list(combinations(x, 2))))))\
  .value_counts()

输出:

(aa, bb)    2
(aa, cc)    2
(bb, cc)    2
(bb, dd)    1
(cc, dd)    1
(aa, ee)    1
(bb, ee)    1
(aa, gg)    1
(gg, cc)    1
dtype: int64