Python 如何将pandas数据帧中的字符串拆分为可以分解成新行的bigram?

Python 如何将pandas数据帧中的字符串拆分为可以分解成新行的bigram?,python,pandas,nltk,tf-idf,cosine-similarity,Python,Pandas,Nltk,Tf Idf,Cosine Similarity,我有一个名称记录数据库,我正试图为其创建bigram,并将bigram转换为数据帧中的新行。我这样做的原因是因为某些记录包含多个名称,而且有些记录可以对同一名称有不同的顺序。我的最终目标是寻找复制品,为每个独特的个体创造一个最终记录。我计划在这个结果上使用TF-IDF和余弦相似性。下面是我试图做的一个例子 当前: 目标: 尝试使用压缩、应用和分解: 或 使用列表理解: 编辑: 第二部分: df2 = pd.DataFrame([ [idx+1, f"{a} {b}"] fo

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

当前:

目标:

尝试使用压缩、应用和分解:

使用列表理解:

编辑:

第二部分:

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'])
尝试使用压缩、应用和分解:

使用列表理解:

编辑:

第二部分:

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'])

所有的名字都有两个部分吗?一个记录可能只是一个名字或姓氏,或者有一个姓氏是两个用连字符分隔的单词。检查更新的答案,它将解决您的问题:@Pygirl Awesome,谢谢!如果数据是John Doe Mike Steve Johnson,则会产生John Doe、Mike Steve和Johnson。可以吗?所有的名字都有两个部分吗?一个记录可能只是一个名字或姓氏,或者有一个姓氏是两个用连字符分隔的单词。检查更新的答案,它将解决您的问题:@Pygirl Awesome,谢谢!如果数据是John Doe Mike Steve Johnson,则会产生John Doe、Mike Steve和Johnson。可以吗?我得到一个错误,第一个选项的float对象不可下标。第二个选项看起来不错,只是我丢失了每条记录的原始ID。我得到一个错误,第一个选项的float对象不可订阅。第二个选项看起来不错,只是我丢失了每条记录的原始ID。这很好,但是有没有办法保留ID?当然,我已经更新了答案。如果有一条记录只有像Johnson这样的姓,有没有办法保留这些实例?这很好,但是有没有办法保留ID?当然,我已经更新了答案。如果有像约翰逊这样只有姓的记录,有没有办法保存这些实例?
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'])