我有一个pandas数据框,如下所示:
Name Missed Credit Grade
A 1 3 10
A 1 1 12
B 2 3 10
B 1 2 20
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
Name Sum1 Sum2 Average
A 2 4 11
B 3 5 15
Run Code Online (Sandbox Code Playgroud)
基本上得到列的总和Credit,并Missed要做到平均上Grade.我现在正在做的是两个groupby Name,然后得到sum和average,最后合并两个输出数据帧,这似乎不是最好的方法.我也在SO上找到了这个,如果我只想在一个列上工作那么有意义:
df.groupby('Name')['Credit'].agg(['sum','average'])
Run Code Online (Sandbox Code Playgroud)
但不确定如何为两列做单线程?
jez*_*ael 24
您需要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
Run Code Online (Sandbox Code Playgroud)
如果还想创建列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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11772 次 |
| 最近记录: |