使用Python的顺序图案挖掘

发布于 2025-01-22 06:23:12 字数 831 浏览 0 评论 0原文

我有一个数据集

Name    Subset    Type    System
A00     9-IU00-A  OP      A
A00     IT00      PP      A
B01     IT-01A    PP      B
B01     IU        OP      B
B03     IM-09-B   LP      A
B03     IM03A     OP      B
B03     IT-09     OP      A
D09     IT-A09    OP      B
D09     07IM-09A  LP      B
D09     IM        OP      A

,因此在这里我需要对名称列进行分组,以使子集和类型相似。 我们必须仅考虑子集列的第一个字母顺序排列,而忽略休息。对于IM-09-B,IM03A可以视为IM。 子集群集首先是字母顺序的字符串,其中任何数字,连字符等都使用

df['Subset'].str.extractall(r'[^a-zA-Z]*([a-zA-Z]+)[^,]*').groupby(level=0)[0].agg(','.join)})

所需的输出

Subset Cluster    Type Cluster    Name        System
IU,IT             OP,PP           A00,B01     A,A,B,B
IM,IM,IT          LP, OP, OP      B03, D09    A,B,A,B,B,A

提取。 如何在这里使用顺序模式挖掘。

I have a dataset

Name    Subset    Type    System
A00     9-IU00-A  OP      A
A00     IT00      PP      A
B01     IT-01A    PP      B
B01     IU        OP      B
B03     IM-09-B   LP      A
B03     IM03A     OP      B
B03     IT-09     OP      A
D09     IT-A09    OP      B
D09     07IM-09A  LP      B
D09     IM        OP      A

So here I need to group the Name column such that Subset and Type are similar.
We have to only consider the first alphabetical part of the subset column and ignore rest. for eg IM-09-B, IM03A can be considered as IM.
Subset clusters are first alphabetical string withput any digit, hyphen, etc. extracted using

df['Subset'].str.extractall(r'[^a-zA-Z]*([a-zA-Z]+)[^,]*').groupby(level=0)[0].agg(','.join)})

Output needed

Subset Cluster    Type Cluster    Name        System
IU,IT             OP,PP           A00,B01     A,A,B,B
IM,IM,IT          LP, OP, OP      B03, D09    A,B,A,B,B,A

Here the first cluster instance is formed because IU is OP and IT is PP in both cases, similar for the second instance.
How can a sequential Pattern mining be used here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪化雨蝶 2025-01-29 06:23:12

我们可以首先sort_values,然后使用链接groupby,一次按名称汇总,然后再次按子集和键入群集:

out = (df.assign(Subset=df['Subset'].str.extractall(r'[^a-zA-Z]*([a-zA-Z]+)[^,]*')
                 .groupby(level=0)[0].agg(','.join))
       .sort_values(df.columns.tolist())
       .groupby('Name').agg(','.join).add_suffix(' Cluster')
       .reset_index()
       .groupby(['Subset Cluster', 'Type Cluster'], as_index=False).agg(','.join)
      )

输出:输出:

  Subset Cluster Type Cluster     Name System Cluster
0       IM,IM,IT     LP,OP,OP  B03,D09    A,B,A,B,A,B
1          IT,IU        PP,OP  A00,B01        A,A,B,B

We could sort_values first, then use a chained groupby, once to aggregate by name, then again by subset and type clusters:

out = (df.assign(Subset=df['Subset'].str.extractall(r'[^a-zA-Z]*([a-zA-Z]+)[^,]*')
                 .groupby(level=0)[0].agg(','.join))
       .sort_values(df.columns.tolist())
       .groupby('Name').agg(','.join).add_suffix(' Cluster')
       .reset_index()
       .groupby(['Subset Cluster', 'Type Cluster'], as_index=False).agg(','.join)
      )

Output:

  Subset Cluster Type Cluster     Name System Cluster
0       IM,IM,IT     LP,OP,OP  B03,D09    A,B,A,B,A,B
1          IT,IU        PP,OP  A00,B01        A,A,B,B
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文