python - 如何将 pandas 数据框中的字符串拆分为二元组,然后分解成新的行?
问题描述
我有一个名称记录数据库,我正在尝试为其创建二元组,并将二元组转换为数据框中的新行。我这样做的原因是因为某些记录包含多个名称,而且有些记录可能对同一个名称有不同的顺序。我的最终目标是寻找重复并为每个独特的个体创建一个最终记录。我计划在这个结果上使用 TF-IDF 和余弦相似度。下面是我正在尝试做的一个例子。
解决方案
尝试使用zip
,apply
和explode
:
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'])
推荐阅读
- javascript - 使用扩展运算符反应添加项目
- ms-word - 如何根据合并字段的值合并完全不同的页面
- vb.net - 解析具有分隔符但非 CRLF 行分隔符的文本文件(使用 vb.net)
- node.js - 阿里云函数是否支持 Node.js 和 Express?
- python - 调用函数而不是使用numpy数组时如何使程序工作?
- c++ - 使用 std::cout 时的输出偏移
- javascript - 可视化音频文件波形,Web Audio API
- javascript - React 将 onclick 数据传递给其他元素
- angular - rjxs 中 catchError 的反义词是什么?
- asp.net-core - 在 Asp.net Core Identity 2.1x 中扩展 UserRoleStore