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

Zah*_*hra 2 group-by pandas listagg

给定数据帧:

   a  b  c
  G1  1  6
  G1  2  7
  G2  1  7
  G2  3  8
  G2  4  9
  G3  5  9
Run Code Online (Sandbox Code Playgroud)

我想将行聚合到:

            b          c
a                       
G1     {1, 2}     {6, 7}
G2  {1, 3, 4}  {8, 9, 7}
G3        {5}        {9}
Run Code Online (Sandbox Code Playgroud)

达到此目的的方法之一是:

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)
Run Code Online (Sandbox Code Playgroud)

但是,对于每个附加列,这将需要单独通过行.

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

ayh*_*han 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}
Run Code Online (Sandbox Code Playgroud)