我有一个像这样的Pandas DataFrame:
ID Traverse001 1->1->1->2->3->1002 13->13003 2->3->13->15004 5->6->3005 16->7->7->7->7->8006 4->4->3->5007 5->5->1->1->1->2
输出应如下所示:
1 to 1 : 41 to 2 : 22 to 3 : 24 to 4 : 13 to 5 : 113 to 13 : 17 to 7 : 3...依此类推
这基本上是识别模式并计算其出现次数,然后为这样的DataFrame生成输出。
我写了一个查询如下:
df.Quad.str.contains(r'1->1').sum()` #获取1->1
但它只是将包含像1->1这样的模式的行相加,而没有单独相加
注意:1->1->1应输出1 to 1 : 2(以此类推)
回答:
import pandas as pdfrom collections import Counterdf = <your dataframe>count = Counter()for row in df['traverse']: nums = list(map(int, row.split('->'))) for index, value in enumerate(nums[:-1]): count[value, nums[index + 1]] += 1for key, value in sorted(count.items()): print('{k[0]} to {k[1]} : {v}'.format(k=key, v=value))
输出:
1 to 1 : 41 to 2 : 22 to 3 : 23 to 1 : 13 to 5 : 13 to 13 : 14 to 3 : 14 to 4 : 15 to 1 : 15 to 5 : 15 to 6 : 16 to 3 : 17 to 7 : 37 to 8 : 113 to 13 : 113 to 15 : 116 to 7 : 1