我有一个pandas数据框,如下所示:
Name Missed Credit Grade A 1 3 10 A 1 1 12 B 2 3 10 B 1 2 20
我想要的输出是:
Name Sum1 Sum2 Average A 2 4 11 B 3 5 15
基本上得到列的总和Credit,并Missed要做到平均上Grade。我现在正在做的是两个groupby Name,然后求和和求平均值,最后合并两个输出数据帧,这似乎并不是最好的方法。我在SO上也发现了这一点,如果我只想在一列上工作,这很有意义:
Credit
Missed
Grade
Name
df.groupby('Name')['Credit'].agg(['sum','average'])
但是不确定如何为两根色谱柱做一个衬管吗?
您需要agg按dictionary然后按rename列名称:
agg
dictionary
rename
d = {'Missed':'Sum1', 'Credit':'Sum2','Grade':'Average'} df=df.groupby('Name').agg({'Missed':'sum', 'Credit':'sum','Grade':'mean'}).rename(columns=d) print (df) Sum1 Sum2 Average Name A 2 4 11 B 3 5 15
如果还想从创建列Name:
df = (df.groupby('Name', as_index=False) .agg({'Missed':'sum', 'Credit':'sum','Grade':'mean'}) .rename(columns={'Missed':'Sum1', 'Credit':'Sum2','Grade':'Average'})) print (df) Name Sum1 Sum2 Average 0 A 2 4 11 1 B 3 5 15
具有命名聚合的解决方案:
df = df.groupby('Name', as_index=False).agg(Sum1=('Missed','sum'), Sum2= ('Credit','sum'), Average=('Grade','mean')) print (df) Name Sum1 Sum2 Average 0 A 2 4 11 1 B 3 5 15