Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从csv数据集中查找唯一的跟踪?_Python_Pandas_Sorting_Unique - Fatal编程技术网

Python 如何从csv数据集中查找唯一的跟踪?

Python 如何从csv数据集中查找唯一的跟踪?,python,pandas,sorting,unique,Python,Pandas,Sorting,Unique,我有一个包含日志数据的csv文件。其中只有两列是我感兴趣的“case:concept:name”,“concept:name”。这里我主要想找到唯一的跟踪以及这些唯一跟踪在csv中重复的次数 我能够根据索引对'case:concept:name'进行排序,以便以顺序格式可视化步骤 import pandas as pd data = pd.read_csv("D:\Task\B.csv") df = data[["case:concept:name","concept:name"]] df

我有一个包含日志数据的csv文件。其中只有两列是我感兴趣的
“case:concept:name”
“concept:name”
。这里我主要想找到唯一的跟踪以及这些唯一跟踪在csv中重复的次数

我能够根据索引对
'case:concept:name'
进行排序,以便以顺序格式可视化步骤

import pandas as pd

data = pd.read_csv("D:\Task\B.csv")

df = data[["case:concept:name","concept:name"]]

df.head()

sort = df.rename_axis('MyIdx').sort_values(by = ['case:concept:name','MyIdx'], ascending = [True, True])

sort.head(50)

我基本上想要所有唯一步骤的计数。这些唯一步骤在整个数据中重复了多少次。

你是这样看的吗

df.groupby(["concept:name"]).count().reset_index()
输出:

concept:name    case:concept:name
check ticket        9
decide              9
examine casually    6
examine thoroughly  3
pay compensation    3
register request    6
reinitiate request  3
reject request      3
或输出2:

df.groupby(["case:concept:name"]).count().reset_index()
输出

case:concept:name   concept:name
1                   5
2                   5
3                   9
4                   5
5                   13
6                   5

按案例编号分组,将组中的任务名称转换为元组并在字典中计数:

 ...
df = data[["case:concept:name","concept:name"]]
dfg= df.groupby(["case:concept:name"])
dd={}
for k,v in dfg:
    print(f"Key:{k} ---> {v}")          # inspection
    print(type(v))                      # inspection
    print(type(v["concept_name"]),"\n") # inspection
    t=tuple(v["concept:name"])
    dd[t]=dd.get(t,0)+1

for process,count in dd.items():
    print(f"{process}: {count}")

Output example:
    ('register request', 'examine thoroughly', 'check ticket', 'decide', 'reject request'): 2
    ('register request', 'check ticket', 'examine casually', 'decide', 'pay compensation'): 1
...

To save it, e.g:

with open("helpdesk_out.csv","w") as fout:
    # using ';' as delimiter
    fout.write("process;count\n")
    for process,count in dd.items():
        proc=str(process).replace("'","")
        fout.write(f"{proc};{count}\n")
编辑1: 我们可以使用之前创建的“dd”来计算对数。(您可以用与前面相同的方式写出结果。)

编辑2: 行按案例编号aka“case:concept:name”分组。 为了清除它,一些打印指令被插入到上面的代码中,标记为“检查”。 “k”是键,“v”是组成数据帧的分组行

Key:1 --->    case:concept:name        concept:name
0                  1    register request
1                  1  examine thoroughly
2                  1        check ticket
3                  1              decide
4                  1      reject request
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

Key:2 --->    case:concept:name      concept:name
5                  2  register request
6                  2      check ticket
7                  2  examine casually
8                  2            decide
9                  2  pay compensation
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

etc.

您能给出一个输出示例吗?@kantal(注册请求、彻底检查、检查票据、决定、拒绝请求)^2(电源2)在这里,这基本上意味着这5件事在整个数据集中重复了两次,以此类推。@kantal您可以将输出保存在新的csv文件中,其中还必须指定单个跟踪在整个数据集中按顺序重复了多少次。@kantal brother任何更新……我想要这样的输出(‘注册请求’、‘彻底检查’、‘检查票’、‘决定’、‘拒绝请求’):2(‘注册请求’、‘检查票’、‘随意检查’、‘决定’、‘支付赔偿’):1这里的第一个记录道由5条记录道组成,在整个数据集中重复2次(以上仅在我从数据中的其他地方获得相同信息时才考虑重复)并在csv文件中写入相同信息…输出文件未正确保存。我想要('注册请求'、'彻底检查'、'检查票证'、'决定'、'拒绝请求')全部在一个单元格中,计数数在另一个单元格中。但是每个单元格都正确地保存在单个单元格中,例如“注册请求”一个单元格、“彻底检查”另一个单元格等等……为什么不根据自己的喜好调整输出格式?假设将输出导入电子表格,可以指定“;”作为分隔符。@kan好的,我这样做了,但是现在我还有一个问题,比如说,(a,c,d,e,f)trace是30倍,(a,b,c,e,f)trace是20倍,(a,b,e,f)trace是5倍,现在我必须为上面的(a,c,d,e,f)as(ac,cd,de,ef)和下一个(ab,bc,ce,ef)做配对在此之后,我必须计算ab在整个数据中出现的次数。对于当前场景ab=25和ef=55等,我希望作为输出。您知道如何做到这一点吗…如果您愿意帮助的话。@kantal我得到的输出是这样的“”(“注册请求”、“彻底检查”、“检查票据”、“决定”、“拒绝请求”):1(‘注册请求’、‘彻底检查’、‘检查票证’、‘决定’、‘拒绝请求’):1(‘注册请求’、‘彻底检查’、‘检查票证’、‘决定’、‘拒绝请求’):1(‘注册请求’、‘彻底检查’、‘检查票证’、‘决定’、‘拒绝请求’):1(‘注册请求’、‘彻底检查’、‘检查票证’、‘决定’、‘拒绝请求’):1’’但我希望这样(‘注册请求’、‘彻底检查’):1
Key:1 --->    case:concept:name        concept:name
0                  1    register request
1                  1  examine thoroughly
2                  1        check ticket
3                  1              decide
4                  1      reject request
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

Key:2 --->    case:concept:name      concept:name
5                  2  register request
6                  2      check ticket
7                  2  examine casually
8                  2            decide
9                  2  pay compensation
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>

etc.
ser= df.groupby(["case:concept:name"]).apply(lambda g: tuple(g["concept:name"]))
print(ser.value_counts())

Output example:
(register request, examine thoroughly, check ticket, decide, reject request)      2
(register request, check ticket, examine thoroughly, decide, reject request)      1

ser2= pd.Series( [ p for t in ser for p in zip(t,t[1:]) ] )
print(ser2.value_counts().sort_index())

Output example:
(check ticket, decide)                      7
(check ticket, examine casually)            2
(check ticket, examine thoroughly)          1