如何在一行中通过行聚合多个列到集合

时间:2018-01-19 20:58:37

标签: pandas group-by listagg

给定数据框:

   a  b  c
  G1  1  6
  G1  2  7
  G2  1  7
  G2  3  8
  G2  4  9
  G3  5  9

我想将行汇总到:

            b          c
a                       
G1     {1, 2}     {6, 7}
G2  {1, 3, 4}  {8, 9, 7}
G3        {5}        {9}

达成这个目标的方法之一是:

df = pd.DataFrame ({'a':['G1','G1','G2','G2','G2','G3'], 'b':[1,2,1,3,4,5], 'c':[6,7,7,8,9,9]})
df_agg1 = df.groupby ('a')['b'].apply (set)
df_agg2 = df.groupby ('a')['c'].apply (set)
pd.concat ([df_agg1, df_agg2], axis = 1)

但是,对于每个附加列,这将需要单独传递行。

我想知道是否有更有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:5)

使用groupby.agg:

df.groupby('a').agg(lambda x: set(x))
Out: 
            b          c
a                       
G1     {1, 2}     {6, 7}
G2  {1, 3, 4}  {8, 9, 7}
G3        {5}        {9}