首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas数据分组

Pandas数据分组
EN

Stack Overflow用户
提问于 2022-04-08 10:22:20
回答 2查看 86关注 0票数 2

我有一个数据框架

代码语言:javascript
复制
Name    Subset    Type    System
A00     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      A
B03     IT-09     OP      A
D09     IT        OP      A
D09     IM        LP      B
D09     IM        OP      A

基本数据,我需要转换它基于分组名称和子集字符串提取使用extractall(r'[^a-zA-Z]*([a-zA-Z]+)[^,]*').groupby(level=0).agg(', '.join)。系统、子集应按类型依次提及。

输出示例:

代码语言:javascript
复制
Subset Cluster    Type Cluster    Name          System        Subsets
IU,IT             OP,PP           A00,B01       A,A,B,B       IU00-A,IT00
IM,IM,IT          LP, OP, OP      B03, D09      A,A,A,A,B,A   IM-09-B,IM03A,IT-09,IT,IM,IM   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-08 21:54:07

groupby (首先按“名称”分组,然后再按“子集集群”和“类型集群”分组)可以完成以下任务:

代码语言:javascript
复制
out = df.assign(**{'Subset Cluster': df['Subset'].str.extractall(r'[^a-zA-Z]*([a-zA-Z]+)[^,]*')\
                                                 .groupby(level=0)[0].agg(', '.join)})\
        .sort_values(by=df.columns.tolist())\
        .groupby('Name', as_index=False).agg(', '.join).rename(columns={'Type':'Type Cluster'})\
        .groupby(['Subset Cluster', 'Type Cluster'], as_index=False).agg(', '.join)

输出:

代码语言:javascript
复制
  Subset Cluster  Type Cluster      Name                             Subset            System
0     IM, IM, IT    LP, OP, OP  B03, D09  IM-09-B, IM03A, IT-09, IM, IM, IT  A, A, A, B, A, A  
1         IT, IU        PP, OP  A00, B01           IT00, IU00-A, IT-01A, IU        A, A, B, B
票数 3
EN

Stack Overflow用户

发布于 2022-04-08 12:57:48

从dataframe开始,为了达到您的结果,我将使用两个聚合操作,因为您需要进行两个分组,相对于NameSubset Cluster。我会这样做:

代码语言:javascript
复制
df.rename(columns={'Subset': 'Subset Cluster'}, inplace=True)
df['Subsets'] = df['Subset Cluster'].apply(lambda s: s[:2])

df = df.groupby('Name').agg(lambda col: ', '.join(sorted(list(col))) ).reset_index()
df = df.groupby('Subsets').agg(lambda col: ', '.join(sorted(list(col))) ).reset_index()

df
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71795377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档