【发布时间】:2017-03-25 23:31:58
【问题描述】:
我查看了大多数以前提出的问题,但无法找到我的问题的答案:
我有以下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 并且只想按年月求和作为分数。
【问题讨论】:
-
您能否详细说明为什么您认为这是一个广泛的呼叫,以及如果您想将
num_attempts保留在群组操作中,您会如何处理它? -
@MaxU 不确定我是否理解 `as_index=False 的用法,它有什么作用?
-
很抱歉我的第一条评论 - 我误解了你。有什么问题:
df.groupby(['year','month'])[['score','num_attempts']].sum()或df.groupby(['year','month']).agg({'score':'sum', 'num_attempts':'max'})? -
@MaxU 如果我想在不同的列中反映结果,这将在结果数据框中创建新列,我可以这样做。我的数据框也很大。这是执行此任务的最佳方式吗?
-
@Boud 我在这个数据框中有近 900 万条记录,似乎需要很长时间才能得到结果,但我还没有看到最后一帧。