如何在一次遍历行中将多列聚合到集合

How to aggregate multiple columns to sets in one pass through the rows

给定的数据框:

   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)

但是,对于每个额外的列,这将需要单独遍历行。

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

使用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}