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

4ioopgfo  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(170)

我看了以前问过的大多数问题,但无法找到我的问题的答案:
我有以下数据。帧

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,只是想按年和月求和作为得分。

wr98u20j

wr98u20j1#

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

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

wa7juj8i2#

要按两列分组并使用Pandas获得另一列的总和,可以使用groupby函数,然后对结果对象调用sum函数。这将按year和month列对数据分组,然后对score列中的值求和。结果输出将是一个包含每组score列总和的序列。

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

相关问题