首页 > 解决方案 > 如何在 Pandas 中组合常用分类列上的行

问题描述

我有以下数据框,我想将其转换为一种新格式,该格式根据“approver_type”中的分类值将所有者和批准者分开。这将导致基于“gid”值的行与包含组各自所有者和批准者的单独列合并。

起始数据框:

>>> sourcedf
   gid group_name approver_type approver_name
0    5        foo         owner           joe
1    6        bar      approver          john
2    7        baz         owner          jill
3    7        baz      approver          bill
4    5        foo      approver           bob
5    7        baz      approver         jimmy

所需的数据框:

>>> df
    gid group_name owners   approvers
0    5        foo    joe         bob
1    6        bar    NaN        john
2    7        baz   jill  bill,jimmy

复制 sourcedf 的字典:

{'gid': {0: 5, 1: 6, 2: 7, 3: 7, 4: 5, 5: 7}, 'group_name': {0: 'foo', 1: 'bar', 2: 'baz', 3: 'baz', 4: 'foo', 5: 'baz'}, 'approver_type': {0: 'owner', 1: 'approver', 2: 'owner', 3: 'approver', 4: 'approver', 5: 'approver'}, 'approver_name': {0: 'joe', 1: 'john', 2: 'jill', 3: 'bill', 4: 'bob', 5: 'jimmy'}}

标签: pythonpandaspandas-groupby

解决方案


pivot_table与自我定义一起使用aggfuncjoin

df.pivot_table(index=['gid','group_name'],columns='approver_type',values='approver_name',aggfunc=','.join)
Out[36]: 
approver_type     approver owner
gid group_name                  
5   foo                bob   joe
6   bar               john  None
7   baz         bill,jimmy  jill

推荐阅读