熊猫:按两列分组以获得另一列的总和

时间:2016-11-11 17:14:33

标签: pandas group-by

我查看了之前提出的大多数问题,但未能找到我的问题的答案:

我有以下data.frame

           id   year month score num_attempts
0      483625  2010    01   50      1
1      967799  2009    03   50      1
2      213473  2005    09  100      1
3      498110  2010    12   60      1
5      187243  2010    01  100      1
6      508311  2005    10   15      1
7      486688  2005    10   50      1
8      212550  2005    10  500      1
10     136701  2005    09   25      1
11     471651  2010    01   50      1

我想获得以下数据框

year month sum_score sum_num_attempts
2009    03   50           1
2005    09  125           2
2010    12   60           1
2010    01  200           2
2005    10  565           3

以下是我的尝试:

sum_df = df.groupby(by=['year','month'])['score'].sum()

但这看起来并不高效和正确。如果我需要聚合多个列,这似乎是一个非常昂贵的调用。例如,如果我有另一列num_attempts,只想按年份总和作为分数。

2 个答案:

答案 0 :(得分:6)

这应该是一种有效的方式:

sum_df = df.groupby(['year','month']).agg({'score': 'sum', 'num_attempts': 'sum'})

答案 1 :(得分:0)

根据丹尼斯的解决方案,这应该会导致包含所需列的 df:

sum = df.groupby(["year", "month"]).agg({"score": "sum", "num_attempts": "sum"}).reset_index()