如何统计Pandas DataFrame中路径连续节点对的出现次数?
解决方案:统计Pandas DataFrame中连续节点对的出现次数
这里有一套简洁高效的方法来实现你需要的连续节点对统计,直接上代码和解释:
完整代码
import pandas as pd # 构造示例数据(如果你的df已经存在可以跳过这部分) data = { 'ID': ['001', '002', '003', '004', '005', '006', '007'], 'Traverse': [ '1->1->1->2->3->1', '13->13', '2->3->13->15', '5->6->3', '16->7->7->7->7->8', '4->4->3->5', '5->5->1->1->1->2' ] } df = pd.DataFrame(data) # 生成所有连续节点对 pairs = df['Traverse'].str.split('->', expand=False).apply( lambda x: list(zip(x, x[1:])) ).explode() # 统计次数并按要求格式输出 counts = pairs.value_counts() for pair, cnt in counts.items(): print(f"{pair[0]} to {pair[1]} : {cnt}")
代码分步解释
- 拆分节点字符串:用
str.split('->', expand=False)把每个Traverse字段拆分成节点列表,比如'1->1->1->2->3->1'会变成['1','1','1','2','3','1']。 - 生成连续节点对:通过
apply和zip(x, x[1:]),把每个节点列表中的相邻元素配对,生成类似('1','1')、('1','2')这样的元组列表。 - 展开节点对:用
explode()把每个列表里的元组单独拆成行,这样所有节点对都集中在一个Series里,方便后续统计。 - 统计并格式化输出:
value_counts()自动统计每个节点对的出现次数,最后循环输出成你需要的[节点1] to [节点2] : [次数]格式。
输出结果
运行代码后会得到如下输出(按出现次数降序排列):
1 to 1 : 4 7 to 7 : 3 1 to 2 : 2 2 to 3 : 2 5 to 5 : 1 4 to 4 : 1 3 to 1 : 1 13 to 13 : 1 3 to 13 : 1 13 to 15 : 1 5 to 6 : 1 6 to 3 : 1 16 to 7 : 1 7 to 8 : 1 4 to 3 : 1 3 to 5 : 1 5 to 1 : 1
内容的提问来源于stack exchange,提问作者Arjun Bhasin
相关产品推荐
相关产品推荐

