给定数据框:
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)
但是,对于每个附加列,这将需要单独传递行。
我想知道是否有更有效的方法来实现这一目标?
答案 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}