我查看了之前提出的大多数问题,但未能找到我的问题的答案:
我有以下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
,只想按年份总和作为分数。
答案 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()