python - 使用 Pandas 进行数据分组

标签 python python-3.x pandas pandas-groupby

我有一个数据框

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)。而Systems、Subsets应该按照Types依次提及。

输出示例:

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   

最佳答案

双重groupby,我们首先按“名称”分组,然后再次按“子集集群”和“类型集群”进行分组:

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)

输出:

  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

关于python - 使用 Pandas 进行数据分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71795377/

相关文章:

python - Django 表单字段上传错误文件名错误

python - 如何根据另一个列值将多个 Panda 的 DataFrame 合并到每个列值的数组中

Python 用 'numpy.ndarray' 创建一个字典

Python 将列表写入 csv

python - 如何 reshape 这个张量?

linux - 在 Screen session 中启动 Python 脚本

python - 类型错误 : request() missing 1 required positional argument: 'url'

python - 难以将不同页面的项目打印在一起

python - 动态定义 Pandas 数据框中的新列

python - Pandas :获取系列的前 10 个元素