如何将 pandas 数据框中的字符串拆分为双字母组,然后再分解成新行?

How to split a string in a pandas dataframe into bigrams that can then exploded into new rows?

我有一个姓名记录数据库,我正在尝试为其创建二元组并将二元组转换为数据框中的新行。我这样做的原因是因为有些记录包含多个名称,而且有些记录可能对同一名称有不同的顺序。我的最终目标是寻找重复项并为每个独特的个体创建一个最终记录。我计划在这个结果上使用 TF-IDF 和余弦相似度。下面是我正在尝试做的一个例子。

当前:

目标:

bigrams = [[id, ' '.join(b)] for id, l in zip(df['ID'].tolist(), df['Name'].tolist()) for b in zip(l.split(" ")[:-1], l.split(" ")[1:])]
bigrams_df = pd.DataFrame(bigrams, columns = ['ID','Name'])

尝试使用 zipapplyexplode:

df.Name = df.Name.str.split() 

df.Name.apply(lambda x: tuple(zip(x,x[1:]))).explode().map(lambda x: f"{x[0]} {x[1]}")

使用列表理解:

df2 = pd.Series([ f"{a} {b}" for val in df.Name for (a,b) in (zip(val,val[1:]))])

0         John Doe
1         John Doe
1         Doe Mike
1       Mike Smith
2         John Doe
2         Doe Mike
2       Mike Smith
2      Smith Steve
2    Steve Johnson
3       Smith Mike
3          Mike J.
3           J. Doe
3      Doe Johnson
3    Johnson Steve
4         Steve J.
4             J. M
4          M Smith
Name: Name, dtype: object

编辑:

第二部分:

df2 = pd.DataFrame([ [idx+1, f"{a} {b}"] for idx,val in enumerate(df.Name) for (a,b) in (zip(val,val[1:]))], columns=['ID', 'Names'])